联合索引(复合索引)在B+树上的结构

附上原文地址 :https://blog.csdn.net/klchht/article/details/78146443?locationNum=9&fps=1.net

感谢做者分享,本人最近看了好多关于说明索引和树的关系的文章,都没获得想要的,经过看了这篇文章后才对索引有了清晰的认识,blog

 

这里以MySql INNODB为例,MyISAM道理是同样的。而后先从原文搬几个图过来:排序

这是一张表格,col1 是主建,col2和col3 是普通字段。那么主索引 对应的 B+树 结构是这样子的:索引

 

也能够是这样子的,这是我画的:io

 

如今呢,对col3 创建一个单列索引,原文图:im

 

看完这个图也是能够理解的,那么想法来了,若是对 col3 和 col2 创建 联合索引,那么 B+ 树会是一个什么样子的呢?数据

首先能够确定的是,确定只有一棵树,又由于 最左原则的存在,那么带着这个想法本身试着画了下:img

建索引语句 CREATE INDEX IDX_XXX ON TABLE(COL3, COL2);分享

先根据col3 排序,在根据 col2 排序,如上图。co

原文例子中的数据没有重复数据,为了更好的理解,我本身改了下:

红色框是改动的地方,把col3 改为有重复数据了,而后 仍是对 col3 ,col2创建联合索引,那么 B+树 以下:

红色框是和原来不同的地方。

联合索引在查找的时候,好比要找 Alice,34 这条记录 WHERE COL3 = 'Alice' AND COL2 = 34

先根据col3 查找 Alice ,找到了2条记录,在根据col2 查找 34,而后获取到主键 15 ,在根据主键去查找 主索引。

若是 是 WHERE COL2 = 34,因为只有联合索引 (col3, col2),没有col2 的单列索引。

那么查找的时候,就无法根据上面的这棵树来查找 ,只能全表扫描。

因此为何会有最左原则,就是由于 B+树 是根据最左边的字段构建的,个人想法是这样子的。

若是不对,必定要帮忙批评指正啊。

相关文章
相关标签/搜索