转自
mysql联合索引的数据结构_cristianoxm的博客-CSDN博客_联合索引的数据结构
结构
例如表数据如下:
bcd三列组成一个联合索引,在B+树上的结构图:
对于联合索引来说只不过比单值索引多了几列,而这些索引列全都出现在索引树上。
对于联合索引,存储引擎会首先根据第一个索引列排序,如上图我们可以单看第一个索引列,横着看,
如,1 1 5 12 13....他是单调递增的;
如果第一列相等则再根据第二列排序,依次类推就构成了上图的索引树,上图中的b列都等于1时,则根据c排序,此时c列也相等则按d列排序,如:1 1 4
,
1 1 5
,c=4在c=5前面,以及
13 12 4
,
13 16 1
,
13 16 5
就可以说明这种情况。`
查询路线
当我们的SQL语言可以应用到索引的时候,比如
select * from T1 where b = 12 and c = 14 and d = 3;
也就是T1表中a列为4的这条记录。存储引擎首先从根节点(一般常驻内存)开始查找,第一个索引的第一个索引列为1,12大于1,第二个索引的第一个索引列为56,12小于56,于是从这俩索引的中间读到下一个节点的磁盘文件地址,从磁盘上Load这个节点,通常伴随一次磁盘IO,然后在内存里去查找。当Load叶子节点的第二个节点时又是一次磁盘IO,比较第一个元素,b=12,c=14,d=3完全符合,于是找到该索引下的data元素即ID值,再从主键索引树上找到最终数据。
最左前缀匹配
之所以会有最左前缀匹配原则和联合索引的索引构建方式及存储结构是有关系的。首
先我们创建的index_bcd(b,c,d)索引,相当于创建了(b)、(b、c)(b、c、d)三个索引