oracle执行计划和hint的认识

来源:互联网 发布:淘宝买原味内裤的店铺 编辑:程序博客网 时间:2024/05/16 01:50
一、 说说你对hint的认识
1.执行计划能为SQL优化提供依据,而hint是用户和优化器沟通的主要手段。
2.通过hint可以让优化器改变执行计划,促使我们写出好的程序
3.hint可以被认为是种特殊的注释,如果写法不正确就和普通的注释一样了。另外遇到以下情况hint也会失效:
A.算法没能够支持
B.组合hint有矛盾
C.如果优化器发现按照hint执行结果可能会出错,此时hint就失效。rownum实体化的方式就是利用了这个规则
4.11g中,所有的hint都可以从视图v$sql_hint中找到name和inverse是两个关键的字段,代表hint的名称和反义词。parallel的hint变成了shared
5.hint大致可分为以下几类:
A.初始化参数hint(可以覆盖在系统级或会话定义的部分的初始化参数)
B.查询转化hint(在逻辑优化阶段控制查询转化技术的使用)
C.访问路径hint(控制访问数据的方法,比如是否使用索引等)
D.连接提示hint(不仅控制连接的方法,还控制连接表的顺序)
E.并行处理hint(控制如何使用并行处理)
F.其他hint(控制没有归到前几种分裂的其他一些特性的使用)
6.hint的作用范围默认为当前查询块内,如果需要在全局有效,则需要通过别名的写法实现。如果没有无法定义别名的情况下,则必须qb_name定义别名,然后通过@别名的方式书写


二、说说你对rownum 实体化视图优化方法表连接的认识
1.通过rownum可以将表连接的次序固定,确保优先计算本级的查询结果。因为在某些情况下,优化器会选择将错误的表连接顺序
2.加上rownum不会改变原语句的业务逻辑


三、简要谈谈你对非hint方式影响执行计划的认识。
主要分为三类:
1.在设计阶段:根据不同的业务场景,利用数据库的特性有针对的进行设计,风险小。主要方式包括:分区表、聚簇表、索引组织表、物化视图、并行度、列空值、主外键。
2.程序优化阶段:在确保不改变查询逻辑的前提下,通过改写语句的写法,风险略大。主要方式包括:with子句、insert all、rownum分页、rownum实体化、缓存结果、分区条件有无。
3.其他方式:set_table_stats、预估索引
0 0