Oracle Hint(提示)和INDEX(索引)的一些忠告

Oracle的hint种类繁多,大致可以分为下面几类:
优化方式和目标:如RULE、CHOOSE、FIRST_ROWS、ALL_ROWS等。
访问路径:如INDEX、FULL、CLUSTER、INDEX_FFS等。
查询转换:如MERGE、USE_CONCAT、NO_EXPAND等。
连接顺序:如LEADING、ORDERED、STAR等。
连接操作:如USE_NL、USE_HASH、USE_MERGE等。
并行执行:如PARALLE、NOPARALLEL、PARALLEL_INDEX等。
其他类型;如APPEND、UNNEST、CACHE等。

INDEX只是Hint的一类。

关于LEADING、ORDERED:
    /*+ORDERED*/提示按照from后表的顺序执行。
    /*+LEADING(table1 table2 ...)*/提示按照指定顺序执行。
关于USE_NL、USE_HASH、USE_MERGE:
    我测试的是10g,三者只需填写表名作为参数,无顺序需要,应该是Oracle自动选择驱动表。
    但是、可以用LEADING或ORDERED指定顺序。
     (注意)INDEX的使用影响的是表自身的查询;USE_NL、USE_HASH、USE_MERGE影响的是表之间的连接。
    详细参考:http://hi.baidu.com/di_wan/modify/blog/618aedca267ab783c8176829

关于INDEX参考:http://hi.baidu.com/di_wan/blog/item/fd943290b5a66388a877a424.html

 


Hint是把双刃剑,甚至是颗炸弹。

对于DB设计者、SQL制作者、DBA在优化SQL时,存在以下效率的高低:
追加约束条件 > 调整SQL逻辑 > 设计INDEX > 加入Hint
而且越后面的风险也越大。
因为开发环境、测试环境、最终客户环境的数据量、数据库版本、硬件等等总会有不同;
而Hint是强制执行的(自动忽略错误Hint语句),
就会产生在某处高效的Hint,在另一处却非常耗费资源。

如果不是可以在最终客户环境上操作的DBA,最好不要写Hint,
只要做好INDEX,
Oracle的自动优化一定会用。

转载于:https://www.cnblogs.com/rootq/archive/2008/09/10/1288722.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值