以前學習這一塊的時候,是說:假設建立了聯合索引a+b,那麼查詢語句也一定要是這個順序才能應用該索引。
那麼實際是怎樣呢,經過mysql這麼多次版本升級,相信mysql已經給我們做了某些優化。
下面是我的實測結果:(5.7版本)
step1:反順序也是可以應用索引的。
step2:正常順序更加沒問題
step3:在有單列索引情況下,竟然優先使用了聯合索引
step4:將idx_name_del中的索引順序換了下,把name換前面。
step5:將idx_pid_del中的索引順序換了下,把pid換前面。這下優化器顯示:使用單列索引。
總結:
結論1:在有聯合索引時,順序已不再要緊,mysql內部已經做了優化,只要是聯合索引的那幾個條件與where子句中的條件匹配,都能應用對應的聯合索引。
結論2:在有聯合索引(a+b)和單列索引a同時存在時,通過a條件的查詢會優先使用聯合索引。
結論3:在有聯合索引(b+a)和單列索引a同時存在時,通過a條件的查詢會使用單列索引,聯合查詢不會出現在possible keys中。