SQL最左匹配原則


定義描述

最左原則定義:

最左優先,以最左邊的為起點任何連續的索引都能匹配上。
同時遇到范圍查詢例如 >、<、between、like就會停止匹配。

簡單解釋:

如果我們創建只有單個字段的索引,那么只要限制條件中出現了該字段就會使用該條索引
如果建立聯合索引,那從你第一個對應索引中最左邊的字段就要開始使用該索引了

值得提一下的是在MySQL5.7中對索引支持全排列以至於不再遵循最左原則,這是值得考究的

從左到右如果出現不連續或者范圍查詢則都會只使用部分索引

原理解析

我們都知道索引的底層是B+樹,我們就先來聊一聊B樹
B樹是一種平衡多路查找樹,我們就從最簡單的平衡二叉樹聊起

平衡二叉樹的特點如下:
(1)非葉子節點最多擁有兩個子節點;
(2)非葉子節值大於左邊子節點、小於右邊子節點;
(3)樹的左右兩邊的層級數相差不會大於1;
(4)沒有值相等重復的節點;

而B樹平衡多路查找樹就是把二叉樹復雜化,不過還是遵頊以上的特點
無非是每個節點存放的數據更多了但是都遵循左小右大的規律
而B+樹作為B樹的plus版本,則是將非葉子節點都用來作為數據索引
從而使樹的非葉子節點存儲的關鍵字大大增加,還具有以下特點:

(1)B+樹的層級更少:
    相較於B樹B+每個非葉子節點存儲的關鍵字數更多,樹的層級更少所以查詢數據更快;
(2)B+樹查詢速度更穩定:
    B+所有關鍵字數據地址都存在葉子節點上,
    所以每次查找的次數都相同所以查詢速度要比B樹更穩定;
(3)B+樹天然具備排序功能:
    B+樹所有的葉子節點數據構成了一個有序鏈表,
    在查詢大小區間的數據時候更方便,數據緊密性很高,緩存的命中率也會比B樹高。
(4)B+樹全節點遍歷更快:
    B+樹遍歷整棵樹只需要遍歷所有的葉子節點即可,
    而不需要像B樹一樣需要對每一層進行遍歷,這有利於數據庫做全表掃描。

B樹相對於B+樹的優點是,如果經常訪問的數據離根節點很近,
而B樹的非葉子節點本身存有關鍵字其數據的地址,所以這種數據檢索的時候會要比B+樹快

除了這兩種B樹還有B*樹,這就更少接觸到了,如果有興趣可以自行去了解

說了這些,我們就可以知道B+樹都使用過數據索引找到的數據,而如果不連續
則不存在數據索引來指導找到地址,從而都滿足從左到右的規律,也就是最左匹配原則了


免責聲明!

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



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