2013-10-10 71 views
1

假設您有一個列A和B以及其他列表。您在表格上創建多列索引(A,B)。索引的順序是否重要?

您的查詢是否必須考慮索引的順序?例如,

select * from MyTable where B=? and A in (?, ?, ?); 

在查詢中,我們先放B,再放A。但指數是(A,B)。訂單是否重要?

更新:我知道索引的順序在最左邊的前綴規則方面的重要顯著。但是,查詢本身首先出現哪個列是否重要?

+0

可能重複:http://stackoverflow.com/questions/3043042/does-the-order-of-conditions-in-a-where-clause-影響MySQL的性能,http://stackoverflow.com/questions/4035760/does-the-order-of-fields-in-a-where-clause-affect-performance-in-mysql – showdev

回答

2

在這種情況下,不,但我建議使用EXPLAIN關鍵字,您將看到My​​SQL將使用(或不使用)哪些優化。

1

你可以測試你認爲他們是問題的具體查詢,但否則我不會擔心這種優化。您的查詢大多可能會被查詢計劃從其原始形式中刪除。也就是說,MySQL應該很好地規劃如何使用索引來優化速度。這可能需要條件是以不同的順序,但我懷疑它。如果MySQL實際上不得不重新排序優化條件,那麼相對於查詢的執行(至少如果結果集很大),這將是一個非常小的成本。

2

索引中列的順序可能會影響MySQL優化程序使用索引的方式。具體而言,MySQL可以使用您的複合索引在列A上進行查詢,因爲它是複合索引的第一部分。

但是,您的問題涉及查詢中列引用的順序。在這裏,優化器將適當地處理引用,並且順序不重要。不同的子句必須以特定的順序出現才能滿足語法規則,所以無論如何你都無法控制。

上多列索引優化

MySQL參考是here

相關問題