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的自動優化一定會用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM