對於mysql 索引 最左前綴匹配原則 個人理解;
由於mysql 在構建多字段 聯合索引時, 其設計原則為
- 讀取創建索引時 指定的字段順序(從左到右)
- 在構建B+tree非葉子節點時,其會按照 字段從左到右的順序進行組合,並依次對字段存儲的數據按照從小到大的順序進行排序;最終保證整體索引數據的有序性
如果不使用 最左前綴匹配原則,在執行查找操作時 就無法利用 B+tree 有序數據的特點,從而會導致時間復雜度直接退化為 O(n)級別
而對於B+tree 本身的查詢時間復雜度為 O(logmn) m表示其為m叉樹, n表示為節點的總數量;
mysql 本身對 B+tree 的葉子節點做了優化,首先葉子節點存儲的是當前索引字段關聯的所有主鍵,且對於所有的葉子節點按照從左到右的順序進行連接構成單鏈表; 從而其支持 (索引)范圍查詢;
對於索引范圍查詢其特點為 只需要通過定位 起始條件索引葉子節點查詢位置 以及 定位 終止條件 索引葉子節點查詢位置, 通過直接定位起始葉子節點快速遍歷到終止葉子節點,從而提高查詢效率