mysql創建多列索引(聯合索引)有最左前綴的原則,即最左優先,如:php
若是有一個2列的索引(col1,col2),則已經對(col1)、(col1,col2)上創建了索引;
若是有一個3列索引(col1,col2,col3),則已經對(col1)、(col1,col2)、(col1,col2,col3)上創建了索引;mysql
總結:
一、b+樹的數據項是複合的數據結構,好比(name,age,sex)的時候,b+樹是按照從左到右的順序來創建搜索樹的,好比當(張三,20,F)這樣的數據來檢索的時候,b+樹會優先比較name來肯定下一步的所搜方向,若是name相同再依次比較age和sex,最後獲得檢索的數據;但當(20,F)這樣的沒有name的數據來的時候,b+樹就不知道第一步該查哪一個節點,由於創建搜索樹的時候name就是第一個比較因子,必需要先根據name來搜索才能知道下一步去哪裏查詢。git
二、好比當(張三,F)這樣的數據來檢索時,b+樹能夠用name來指定搜索方向,但下一個字段age的缺失,因此只能把名字等於張三的數據都找到,而後再匹配性別是F的數據了, 這個是很是重要的性質,即索引的最左匹配特性。(這種狀況沒法用到聯合索引)github
ref: sql
https://github.com/phpforlan/ArtisanPHP/issues/10segmentfault
https://segmentfault.com/q/1010000000342176數據結構