2010-05-24 72 views
0

我在MySQL中有一個表,有7個索引,其中大多數都在多個列上。我覺得這裏索引太多了。有沒有什麼辦法可以獲得數據庫所有數千個查詢使用哪些索引的統計數據,哪些數據不太值得我知道哪些索引要考慮首先刪除?如何識別哪些索引未被使用?

回答

3

你可以嘗試確定which indexes are used at all.

然而,就作爲一個有用的列表,對不起,沒有內置的方法來做到這一點,我不認爲查詢分析器甚至做到這一點。

您似乎可能需要執行審計以確定正在使用的影響該表的查詢,並對它們進行解釋以查看它們是否使用了任何索引。

有一個錯誤報告requesting this feature

0

這不是一個具體的做法,但你可能會說。嘗試EXPLAIN SELECT...,它會告訴你正在使用哪些表,有多少行,等等,等等這應該給你足夠的數據來加速你的表

+0

是的,但我有這麼多的疑問 – 2010-05-24 21:37:59

0

打開生產中的一般查詢日誌記錄。是的,我知道這很痛苦,我知道它會影響你的生產服務器,但是BITE THE BULLET。稍後會有用。如果可能的話,讓它無限期地打開(當然要確保日誌的旋轉,壓縮和過期能夠正常工作,並且絕對監控磁盤空間的使用情況;告訴Ops如果在壞事情發生時如何關閉它)

然後, mk-query-digest將在您的所有查詢中運行EXPLAIN(當然,這是針對非生產數據庫執行的,但使用生產數據庫的最近轉儲)。

這將使您能夠確定哪些索引正在使用以及使用頻率。至少,如果EXPLAIN沒有說謊,並且您的測試服務器使用與生產相同的計劃。

或者至少,它大多會。 EXPLAIN還沒有告訴你DELETE,UPDATE查詢是如何工作的。