2009-05-29 20 views
4

我有一個包含兩個索引的表,其中一個是某個查詢的覆蓋索引速度更快。但是,mySQL(5.1)沒有選擇正確的索引。我已經查看了這個查詢的解釋並完成了一些速度測試,如果您強制使用密鑰,它會產生很大的差異。獲取SQL以使用正確的索引

有沒有什麼方法可以檢查它如何選擇索引以及它基於什麼標準?

回答

7

這將使用你需要(如果它是可用)指數:

SELECT * 
FROM table FORCE INDEX (myindex) 

MySQL收集和使用表統計信息來估計指數的基數。

它保持在information_schema.statistics

可應用於過濾的兩個索引中,MySQL選擇基數較大的索引。

如果有兩個大基數的索引,它可以選擇兩個索引都是INDEX MERGE

在一個指標可以起到WHERE條件,另一個可以起到ORDER BYMySQL似乎更喜歡第一個

在後一種情況下,然而,最好都列在創建一個綜合指數,它可以起到兩個條款。

相關問題