我已閱讀過有關何時製作多列索引的問題,該順序很重要,通常您希望首先出現在WHERE子句中的列先於其他列將出現在ORDER BY等等。但是,如果您只是單獨編制索引,您是不是也會加快速度? (顯然不是因爲我自己的實驗告訴我,組合索引行爲比單獨索引每個索引行爲快得多)。什麼時候應該使用多列索引,以及哪種類型的查詢能夠提升?什麼時候在MYSQL中的一個索引優於兩個
回答
對於所有條件都是多列索引的一部分的情況,多列索引將是最有效的 - 甚至比具有多個單索引更爲有效。
另外,請記住,如果您有多列索引,但不利用多列索引索引的第一列(或者不以其他方式從頭開始並保持與先前相鄰的列相鄰)使用的索引),多列索引不會有任何好處。 (例如,如果我有一個索引在列[B,C,D]上,但是有一個WHERE只使用[C,D],這個多列索引將沒有任何好處。)
參考:http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html :
MySQL能使用多列索引來測試索引的所有 列的查詢或查詢該測試只是第一列中, 前兩列,前三列,依此類推。如果您在索引定義中以正確的順序指定 列,則單個 組合索引可以在同一個 表上加速多種查詢。
第二條語句對於SQL Server至少不是100%正確的,我懷疑MYsql是一樣的...... –
@MitchWheat - 參考MySQL文檔更新了答案,確認這是準確的。 – ziesemer
我指的是colA,colB,colC COULD上的索引有時候會被列colB + colC上的查詢使用,但不是colA –
簡短的回答是,「這取決於」。
長的答案是這樣的:如果你有時做
WHERE COL1 = value1 and COL2 = value2
有時盡
WHERE COL1 = value1
,但從來沒有或幾乎沒有,做
WHERE COL2 = value2
然後一個複合索引(COL1,COL2)將是您的最佳選擇。 (對於mySQL以及其他品牌和型號的DBMS是真的)
更多索引減慢INSERT和UPDATE操作,所以它們不是免費的。
一個複合索引(C1,C2)在下列情況下非常有用:
- 明顯的情況下,其中C1 = V1和C2 = V2
- 如果你這樣做,其中C1 = V1和C2之間v2和v3 - 這對組合索引執行「範圍掃描」
- SELECT ... FROM t WHERE c1 = v1 ORDER BY c2 - 在這種情況下,它可以使用索引對結果進行排序。
- 在某些情況下,作爲「覆蓋指數」 「SELECT c1,c2 FROM t WHERE c1 = 4」可以忽略表格內容,並從索引中獲取(範圍)。
- 1. 兩個數組索引意味着什麼時候放置一個接一個?
- 2. 什麼時候進行索引,在Mongoid中索引什麼?
- 3. MySQL中的兩個單列索引與一個兩列索引?
- 4. Google是什麼時候爲一個網頁編制索引的?
- 5. 你什麼時候可以用降序定義一個索引?
- 6. 什麼時候包含一個索引(自動啓發式)
- 7. 什麼時候multimap優先於map?
- 8. 鑑於什麼時候測試 - 我需要一個「什麼時候」?
- 9. 什麼時候你返回一個類,你什麼時候返回一個HttpResponseMessage?
- 10. 什麼時候應該使用一個引用,什麼時候應該使用一個ProjectReference
- 11. 爲什麼MySQL Workbench在n:m關係上創建兩個索引?
- 12. 在C#中,什麼時候應該使用一個結構,什麼時候應該使用一個類?
- 13. Node.js如何顯示一個新的索引文件,什麼時候完成
- 14. 什麼時候你會返回一個函數的引用?
- 15. 什麼時候應該引用另一個ViewModel的ViewModel
- 16. 什麼時候應該將索引應用於數據庫?
- 17. 什麼時候在mysql中使用OPTIMIZE
- 18. Python:什麼時候兩個變量指向內存中的同一個對象?
- 19. 什麼時候IEnumerable優先於實體框架中的IQueryable?
- 20. 什麼時候添加Rails中的表中的索引
- 21. 什麼時候創建一個weblogic域
- 22. 什麼時候會釋放一個autorelease
- 23. 什麼時候保留一個「委託」
- 24. 什麼時候分裂一個類
- 25. 爲什麼mysql每個表只使用一個索引?
- 26. 彈性搜索中的離線和在線索引是什麼?我們什麼時候需要重新索引?
- 27. 什麼時候在lucene中建立索引
- 28. 什麼時候在sql server中進行全文索引更新?
- 29. 什麼時候在Titan圖中使用邊緣索引?
- 30. 兩個表連接索引優化
是的。這取決於... –