索引原理
B - Tree
- 多路平衡查找树(每个节点最多m(m>=2)个孩子,成为 m 阶或者度)
- 叶子节点具有相同的深度
- 节点中的数据 key 从左到右是递增的
image.png
B+ 树
- MySQL是使用的 B+树做的索引
- 只有叶子节点储存数据, 可以增加树的度
- 叶子节点通过指针相连,可以实现范围查询
image.png
度是不是越大越好:不是,为了更好读取数据,要根据磁盘块大小来划分
索引类型
- 普通索引
- 唯一索引
- 多列索引
- 逐渐索引
- 全文索引, InnoDB不支持
索引失效
模糊匹配、类型转换、最左匹配
- 以 %开头的like 语句
- 出现类型隐式转换
- 没有满足最左匹配
聚簇索引和非聚簇索引
- 二者的区别是指 B+树叶节点存的是指针还是数据记录
- MyISAM索引和数据分离,使用的非聚簇索引
- InnoDB数据文件就是索引文件,逐渐索引就是局促索引
非聚簇索引
image.png
叶子节点存储的指针
聚簇索引
image.png
叶子节点存储数据(主键索引)
聚簇索引与辅助索引
image.png
辅助索引先找到主键以后,再根据主键找到数据
如何排查慢查询
- 排查是否缺索引,是否合理
- 开启并且查询按查询日志
- explain 排查