4
我有一個包含兩個索引的表,其中一個是某個查詢的覆蓋索引速度更快。但是,mySQL(5.1)沒有選擇正確的索引。我已經查看了這個查詢的解釋並完成了一些速度測試,如果您強制使用密鑰,它會產生很大的差異。獲取SQL以使用正確的索引
有沒有什麼方法可以檢查它如何選擇索引以及它基於什麼標準?
我有一個包含兩個索引的表,其中一個是某個查詢的覆蓋索引速度更快。但是,mySQL(5.1)沒有選擇正確的索引。我已經查看了這個查詢的解釋並完成了一些速度測試,如果您強制使用密鑰,它會產生很大的差異。獲取SQL以使用正確的索引
有沒有什麼方法可以檢查它如何選擇索引以及它基於什麼標準?
這將使用你需要(如果它是可用)指數:
SELECT *
FROM table FORCE INDEX (myindex)
MySQL
收集和使用表統計信息來估計指數的基數。
它保持在information_schema.statistics
。
可應用於過濾的兩個索引中,MySQL
選擇基數較大的索引。
如果有兩個大基數的索引,它可以選擇兩個索引都是INDEX MERGE
。
在一個指標可以起到WHERE
條件,另一個可以起到ORDER BY
,MySQL
似乎更喜歡第一個
在後一種情況下,然而,最好都列在創建一個綜合指數,它可以起到兩個條款。