MySQL索引失效的底层原理

cs.usfca.edu/~galles/visualization/...
MySQL索引失效的底层原理
建立联合索引a,b,可以看到a的值是有序的,b是无序
由于a的值是有序的,可以能通过二分查找去查询数据

#用到索引
EXPLAIN SELECT * where a=1 and b=1 from test

由于b的值是无序的,可以不能通过二分查找去查询数据

#用不到索引
EXPLAIN SELECT * where  b=1 from test

所以为什么要遵循最前缀法则了

#and b =1用不到索引
EXPLAIN SELECT * where  a>1  and b =1
#用到索引
EXPLAIN SELECT * where  a=1 and b =1
#用到索引
EXPLAIN SELECT * where  a like "1%"
#用不到索引
EXPLAIN SELECT * where  a like "%1%"

b-tree

MySQL索引失效的底层原理
b-tree存在回旋查找的问题,比如查找大于5的数,我先定位到这个5,定位到这个5之后我再回头去查找6,然后再查找7,然后再查找8然后再查找9,最后查找10

b+tree

MySQL索引失效的底层原理

MySQL索引失效的底层原理
非叶子结点他们只存储这个 key,他们不存储这个 value
叶子结点即存key又存这个value

b+tree和B树有明显的区别

b+tree 彻底解决回旋查找的问题,这里是一个叶子节点,其实他这里是一个链表,他把你所有的数进行了链表的排序,从小到大的排序,他通过单向链表解决回旋查找的问题
MySQL索引失效的底层原理

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

牛逼,低层都拿出来了 :grin:

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!