2017-08-29 96 views
0

我需要檢查查詢中是否缺少索引或索引。Oracle SQL - 檢查SQL查詢中缺失的索引

對於表中的索引檢查我使用的語法:

SELECT index_name 
    , column_position 
    , column_name 
    FROM user_ind_columns 
WHERE table_name = 'table_name' 
ORDER BY index_name, COLUMN_POSITION; 

SELECT index_name 
FROM user_indexes 
WHERE table_name = 'table_name'; 

它可以使用一個程序或SQL腳本來自動發現,如果缺少一個查詢索引和顯示它創造呢?

謝謝!

+0

你所談論的EXPLAIN計劃? –

回答

2

不是。檢查execution plan會告訴你優化器將使用哪些索引(如果有的話);但如果該計劃沒有顯示索引,則可能是

  1. 沒有索引。
  2. 有索引但它們不能用於特定的查詢。
  3. 有技術上可以使用的索引,但優化程序計算出它們不會提高性能。

在#3的情況下,它總是有可能是錯誤的(例如,由於不正確的統計信息或超出優化器準確建模的查詢)。如果這是你正在尋找的情況,那麼沒有簡單的方法來檢測它。

您可能會在dbms_sqltune看到自動調整建議。它通常會告訴你收集統計信息,或者有時會建議一個SQL配置文件或一個新的索引。您可以從企業管理器或腳本調用它:

http://www.williamrobertson.net/documents/automated-sql-tuning-advice.html http://www.williamrobertson.net/documents/automated-sql-tuning-advice-sqlid.html