總結
- 對於聯合索引來說只不過比單值索引多了幾列。
- 聯合索引的所有索引列都出現在索引樹上,並依次順序比較幾個列的大小。
- InnoDB引擎會首先根據第一個索引列“單調遞增”排序,如果第一列相等則再根據第二列排序,依次類推.
必看例子:
數據表T1有字段a,b,c,d,e,其中a是主鍵,除e為varchar其余為int類型,並創建了一個聯合索引idx_t1_bcd(b,c,d),然后b、c、d三列作為聯合索引:

(b,c,d) 聯合索引的所有索引列都出現在索引數上,並依次比較b,c,d三列的大小。

當我們的SQL語言可以應用到bcd聯合索引的時候,比如 select * from T1 where b = 12 and c = 14 and d = 3; 也就是T1表中a列為4的這條記錄。存儲引擎首先從根節點(一般常駐內存)開始查找:
- 第一個索引的第一個索引列為1, 12大於1,第二個索引的第一個索引列為56, 12小於56,於是從這倆索引的中間讀到下一個節點的磁盤文件地址;
- 從磁盤上Load第二層這個節點,通常伴隨一次磁盤IO,然后在內存里去查找。查找到第二層中間那個節點的b列=12,再次通過索引中間的地址,load葉子節點;
- 當Load葉子節點的第二個節點時,又是一次磁盤IO,比較第一個元素,b=12,c=14,d=3完全符合,於是找到該索引下的data元素即ID值,
- 再從主鍵索引樹上找到最終數據。

參考文獻
————————————————
版權聲明:本文為CSDN博主「問北」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ibigboy/article/details/104571930/
