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

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.