附上原文地址 :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+树 是根据最左边的字段构建的,个人想法是这样子的。
若是不对,必定要帮忙批评指正啊。