2011-01-26 42 views
2

是否有一個標準的訂單來爲MySQL中的表創建一個覆蓋索引?這意味着如果我的查詢具有where子句,order by和select語句中的字段,按照什麼順序將索引字段設置爲正確創建覆蓋索引?涵蓋索引的正確的現場訂單 - MySQL

回答

3

覆蓋索引採用逗號分隔列表中的列表列表。該列表從左側開始遍歷/檢查。如果最左側的列未被使用,則不使用索引。這意味着,具有列名單,如:

col_a, col_b, col_c 

如果查詢不包含col_a一個參考,它不會被使用。如果訂單改爲:

col_c, col_b, col_a 

...然後col_c需要在查詢中被引用。繼續使用第二個覆蓋索引列示例,col_bcol_a不必位於查詢中,但評估按列從左至右移動。

爲索引使用列引用可以是在以下章節:

  • SELECT
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

參考:

+0

因此,如果我有一個where子句,然後添加索引where子句中的字段,然後在select語句中的所有字段? – John 2011-01-26 00:45:43

1

MySQL Optimization 7.5.2 Multiple-Column Indexes說:

MySQL在這樣一種方式,查詢速度快多列索引,當你在一個WHERE指定索引的第一列中的已知量子句,即使您沒有爲其他列指定值。

鏈接頁面上的例子還指出,該指數是不使用,如果你不爲索引中的第一列指定值。