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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 1

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

1年前 评论

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