总所周知,mysql的索引遵循的是最左匹配原则
那最左匹配原则在mysql里是怎么玩的?
假设我们在表中有2个字段,一共有6条数据,其中id的索引树见上图
我们现在要查id=6的数据:首先mysql会将0003这个节点加载到内存中比对,发现6要比3大,则取到0003节点的右子节点的地址,然后再将0004 0005这个节点加载到内存中,将6继续跟4和5比对,发现6还是比4和5都大,就取4和5节点的右子节点的地址,最后找到0006这个叶子节点上
以上是id主键的检索方式
下面来说下非主键索引在Myiasm和Innodb中不同
假设我们以name作为索引
当我们要查一个name=mi的数据列时,首先mysql会先将索引树中的节点按照数据库的字符集全部转换一遍,
譬如我们的数据库配置的是utf8mb4,在utf8mb4表里,phone的第一个字段p是100,第二个字母h是150,依此转换一遍,然后拿mi去跟phone比对,如果发现mi比phone大,则取其右子节点,反之取左子节点,直到找到mi为止