您的位置:首页 > 数据库 > Oracle

oracle执行计划和hint的认识

2015-04-04 11:30 363 查看
一、 说说你对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、预估索引
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: