Mysql聯合索引的最左前綴原則說明


我們都知道Mysql數據庫的最左前綴原則。

比如有如下表,表有三個字段a,b,c

table

a b c
     

 

 

 

現在我建立了一個聯合唯一索引:`uk_a_b_c` (a,b,c)

那么按照最左前綴匹配原則:我在查詢條件中,如下情況都能用到索引:

 

1select * from table where a = 12select * from table where a = 1 and  b =13select * from table where a = 1 and  b =1 and c= 1

(4select * from table where a = 1 and c= 1

 

前三個都很好理解,第四個就有點繞了

其原理是:

b+樹的數據項是復合的數據結構,比如(name,age,sex)的時候,b+數是按照從左到右的順序來建立搜索樹的。

比如當(張三,20,F)這樣的數據來檢索的時候,b+樹會優先比較name來確定下一步的所搜方向,如果name相同再依次比較age和sex,最后得到檢索的數據;

但當(20,F)這樣的沒有name的數據來的時候,b+樹就不知道下一步該查哪個節點,因為建立搜索樹的時候name就是第一個比較因子,必須要先根據name來搜索才能知道下一步去哪里查詢。

比如當(張三,F)這樣的數據來檢索時,b+樹可以用name來指定搜索方向,但下一個字段age的缺失,所以只能把名字等於張三的數據都找到,然后再匹配性別是F的數據了, 這個是非常重要的性質,即索引的最左匹配特性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM