認識mysql組合索引的最左匹配原則

關於mysql組合索引的最左匹配原則很多人都理解都是不正確的,那接下來就帶你正確的認識它。

爲何要使用組合索引呢

  • 效率高,減少查詢開銷,索引列越多,通過索引篩選出的數據越少
  • 覆蓋索引,MySQL可以直接通過遍歷索引取得數據,而無需回表,這減少了很多的隨機io操

最左匹配原則是什麼

顧名思義,就是最左優先,在創建組合索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊。複合索引很重要的問題是如何安排列的順序,比如where後面用到c1, c2 這兩個字段,那麼索引的順序是(c1,c2)還是(c2,c1)呢,正確的做法是,重複值越少的越放前面,比如一個列 95%的值都不重複,那麼一般可以將這個列放最前面。另外,複合索引的字段數儘量不要超過 3個,一旦超過,要慎重考慮必要性。

index(a,b,c)
where a=3    只使用了a
where a=3 and b=5    使用了a,b
where a=3 and b=5 and c=4    使用了a,b,c
where b=3 or where c=4    沒有使用索引
where a=3 and c=4    僅使用了a
where a=3 and b>10 and c=7    使用了a,b
where a=3 and b like 'xx%' and c=7    使用了a,b

其實相當於創建了多個索引:key(a)、key(a,b)、key(a,b,c)

到這裏就完了?其實還沒有,思考:where b=3有沒有用的索引?

藉助mysql查詢優化器explain,我們會發現type=index(這個之前分析過),要想用到這種類型的索引,對這個索引並無特別要求,只要是索引,或者某個聯合索引的一部分,mysql都可能會採用index類型的方式掃描。但是呢,缺點是效率不高,mysql會從索引中的第一個數據一個個的查找到最後一個數據,直到找到符合判斷條件的某個索引。

參閱資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章