zoukankan      html  css  js  c++  java
  • 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%5Fwan/modify/blog/618aedca267ab783c8176829

    关于INDEX参考:http://hi.baidu.com/di%5Fwan/blog/item/fd943290b5a66388a877a424.html


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

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

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

  • 相关阅读:
    一本通 1602:烽火传递
    【笔记】Correlation & Convolution
    【笔记】Supreme Axiom → Heine-Borel Theorem
    CCPC2017
    【BZOJ3513】idiots
    【AGC030D】Inversion Sum
    【Gym102823H】Hamming Distance
    CCPC2018
    【ZJOI2014】力
    【Luogu3803】模板:多项式乘法
  • 原文地址:https://www.cnblogs.com/datang/p/2420040.html
Copyright © 2011-2022 走看看