2012-08-16 43 views
1

如果我有這樣的指標:MySQL的不必要的索引

(COL1,COL2,COL3)

我知道它幫助我通過(COL1)搜索; (col1,col2); (col1,col2,col3)。

如果我使用完全相同的列創建另一個索引,phpMyAdmin會警告我可以刪除其中的一個索引,因爲它們是相同的。

但是,如果我有這些索引:

(COL1,COL2,COL3)

(COL1,COL2)

(COL1)

在phpMyAdmin的不提醒我所有。

所以我的問題是,是最後兩個必要的索引在任何情況下?我認爲只有第一個索引就夠了

謝謝。

+1

最後2個索引不是必需的。 – JustinDanielson 2012-08-16 21:07:33

+0

我們不知道他們是否需要看到表格結構。如果它們是唯一鍵或主鍵或其他,則不能刪除它們。需要更多信息來回答問題的第二部分。 SHOW CREATE TABLE tablename \ G – 2012-08-16 21:14:22

+0

@randymelder - 我不是在談論UNIQUE或PRIMARY鍵。我在談論共同的專欄。我知道你提到的那些人需要存在。謝謝。 – Nuno 2012-08-16 21:17:02

回答

3

MySQL將只使用一個索引(最左邊)來優化搜索。從文檔報價:

If the table has a multiple-column index, any leftmost prefix of the index can be used by the optimizer to find rows. For example, if you have a three-column index on (col1, col2, col3), you have indexed search capabilities on (col1), (col1, col2), and (col1, col2, col3).

但是,如果任何指標都是唯一的,那麼有可能是一個很好的理由,他們在那裏。

如果在分析過程中發現任何列經常彼此分開使用,則應考慮爲每個列添加單獨的索引以優化這些查詢。

E.g.

ALTER TABLE tablename ADD INDEX (col1), ADD INDEX (col2), ADD INDEX (col3); 
+0

從你的回答中,我認爲我對這個問題的觀點是正確的。我知道我可能需要創建不同的索引,最左邊的前綴是不同的。 UNIQUE和PRIMARY也是一樣。謝謝您的回答。 – Nuno 2012-08-16 21:18:54