2011-12-11 63 views
0

我已閱讀過有關何時製作多列索引的問題,該順序很重要,通常您希望首先出現在WHERE子句中的列先於其他列將出現在ORDER BY等等。但是,如果您只是單獨編制索引,您是不是也會加快速度? (顯然不是因爲我自己的實驗告訴我,組合索引行爲比單獨索引每個索引行爲快得多)。什麼時候應該使用多列索引,以及哪種類型的查詢能夠提升?什麼時候在MYSQL中的一個索引優於兩個

+0

是的。這取決於... –

回答

3

對於所有條件都是多列索引的一部分的情況,多列索引將是最有效的 - 甚至比具有多個單索引更爲有效。

另外,請記住,如果您有多列索引,但不利用多列索引索引的第一列(或者不以其他方式從頭開始並保持與先前相鄰的列相鄰)使用的索引),多列索引不會有任何好處。 (例如,如果我有一個索引在列[B,C,D]上,但是有一個WHERE只使用[C,D],這個多列索引將沒有任何好處。)

參考:http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html

MySQL能使用多列索引來測試索引的所有 列的查詢或查詢該測試只是第一列中, 前兩列,前三列,依此類推。如果您在索引定義中以正確的順序指定 列,則單個 組合索引可以在同一個 表上加速多種查詢。

+1

第二條語句對於SQL Server至少不是100%正確的,我懷疑MYsql是一樣的...... –

+0

@MitchWheat - 參考MySQL文檔更新了答案,確認這是準確的。 – ziesemer

+0

我指的是colA,colB,colC COULD上的索引有時候會被列colB + colC上的查詢使用,但不是colA –

2

簡短的回答是,「這取決於」。

長的答案是這樣的:如果你有時做

WHERE COL1 = value1 and COL2 = value2 

有時盡

WHERE COL1 = value1 

,但從來沒有或幾乎沒有,做

WHERE COL2 = value2 

然後一個複合索引(COL1,COL2)將是您的最佳選擇。 (對於mySQL以及其他品牌和型號的DBMS是真的)

更多索引減慢INSERT和UPDATE操作,所以它們不是免費的。

1

一個複合索引(C1,C2)在下列情況下非常有用:

  1. 明顯的情況下,其中C1 = V1和C2 = V2
  2. 如果你這樣做,其中C1 = V1和C2之間v2和v3 - 這對組合索引執行「範圍掃描」
  3. SELECT ... FROM t WHERE c1 = v1 ORDER BY c2 - 在這種情況下,它可以使用索引對結果進行排序。
  4. 在某些情況下,作爲「覆蓋指數」 「SELECT c1,c2 FROM t WHERE c1 = 4」可以忽略表格內容,並從索引中獲取(範圍)。
相關問題