Oracle优化之执行计划管理

概述: 本篇文章将探讨以下具体技术。
 
重点:对SQL语句应用提示(hint);
存储提纲—— 以后研究
使用11g的计划基线(baseline)以保证优化器在未来沿着一个更高效的方向发展。—— 以后研究

1.  提示
    提示可以包含在SQL语句中用来指示或者引导优化器的指令。可以使用提示来指定联接的顺序、访问路径的类型、使用索引、优化的目标以及其他指令。 使用提示时,需要十分小心,因为哪怕会导致灾难性的性能影响,优化器仍将视图遵从提示。一般来讲, 只有当用尽非直接方法(收集统计信息、创建直方图、配置参数等)之后,才可以考虑使用提示。
    提示的语法。以   /*+  开头,以  */  结尾。  如 下面的语句中的注释会导致对staff表的全表扫描,即使优化器通常会选择一个基于索引的检索。
        SELECT    /*+   FULL(s)    */      *  
                FROM   staff  s  
                WHERE  s.birth = 1984
                AND         s.staff_sex = 'M'

下面是一些常见的提示。
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
ALL_ROWS                                                  使用ALL_ROWS优化器目标
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
AND_EQUALS
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
APPEND                                            使用直接模式插入
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
CACHE(表名称)                                  当执行全表扫描操作时,促进表在Oracle共享内存中的
                                                          缓存。与NOCACHE 相反。                                                                 
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
FIRST_ROWS_N                               使用FIRST_ROWS优化器目标,为提取前N条记录做优化
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
FULL(表名称)                                     使用全表扫描来访问指定的表,即使存在合适的索引访问
                                                           路径来访问数据。
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
HASH(表名称)                                    对指定的表使用基于散列聚簇的访问方式(显然,只有当表是
                                                           散列聚簇表时才有效)
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
INDEX(表名称[索引名称])                    使用指定表上的指定索引。如果没有指定索引列,则使用表
                                                           带来最低开销的那个索引列
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
NOPARALLEL(表名称)                       不要使用并行查询,即使在表或者数据库默认通常会导致
                                                           并行处理的情况下
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
ORDERED                                         使用FROM子句中表出现的顺序作为连接的顺序。它将覆盖
                                                           普通的基于成本计算得出来的连接顺序
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
PARALLEL(表名称并行度)                  这个提示特定的表应该使用并行扫描。并行度参数确定使用
                                                            多少个查询进程                                          
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
USE_HASH
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 
USE_NL                                               这个提示指定在表连接时,应该使用嵌套循环的方法
- - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - -  - - - - - - 


相同的注释中可以同时出现多个提示,他们由一个空格分开。例如:
       SELECT      /*+   FULL(s)  FULL(d)     */    *
           FROM  staff   s JOIN 
                       dep    d USING(depid)
            WHERE  s. name ='zyj';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值