如果你不能理解或者不去理会,也无妨,我会尽量描述的通俗
我们知道B+树索引十分适合范围查找。
我们现在尝试给it表添加一个多列索引(userid,style,create_time),那么索引文件的叶子节点最终类似这样:
上图关于create_time的类型是int这个错误可以忽略掉.
PRI代表着行主键,InnoDb索引里存的是行主键,MyISAM引擎里存储的是行数据.
我们发现上图的索引原则是:
先按照userid的大小排序,如果userid相同,按照style排序,如果style相同,按照create_time排序.
看完上图,如果稍微思考的话,就会发现,如果sql语句的条件是:where userid = ? 这个条件就绝对非常的快.
OK,是的。我们可以再仔细看看,会得出以下结论:
sql语句条件 | 索引效果 |
where userid = ? | 有 |
where style= ? | 无 |
where create_time = ? | 无 |
where userid = ? and style = ? | 有 |
where userid = ? and style = ? and create_time | 有 |
。。。 | 。。。 |
你可以再分析其他的,但是接下来我将说的就是使用B-tree索引的结论:
从左至右不间断。
你有(A,B,C)三个索引,你的where条件可以查A,AB,ABC,但是不能查B,C,AC,BC
恭喜你获得了一个技能点,接下来的篇章,我们将更深一步探索索引的秘密。在此之前,你可以尝试建个索引玩一玩,针对某些条件查询看是否索引生效了。