2011-02-16 72 views
5

如果我在(a,b)上有一個複合索引,我明白只涉及'a'的查詢仍然會使用複合索引(但不涉及'b'的查詢)mysql組合索引是否使一些其他索引完全冗餘?

我的問題是如果我有(a,b)索引,是否有'a'上的單列索引的任何正當理由?我所讀到的(a,b)指數是否完全取代a,或者僅僅是一個「沒有比什麼都好」的指數,似乎含糊不清。

這假設我是通過a和a,b進行篩選。我有一個表格,其索引太多,會影響寫入性能,並且希望在刪除索引之前進行仔細檢查,我只能確信它們沒有任何好處。

此外,根據我使用InnoDb還是MyISAM,這個答案是否會改變?有關表格是MyISAM,但我們大多數表格都是InnoDb。

回答

2

我的問題是,如果我有(a,b)索引,是否有任何有理由在'a'上有單列索引?

沒有,沒有理由對一個索引(一)如果你有一個關於(A,B)

4

你(A,B)指標也將處理的查詢只涉及 '一個' (a)中不需要索引。

the documentation

如果表有一個多列 指數, 指數的任何最左前綴都可以被優化用於 找到行。

例如,如果您有(COL1,COL2, COL3)一 三列索引,已編入索引的搜索 能力上(COL1),(COL1,COL2), 和(COL1,COL2, COL3)。