-
索引优化的方案
- 使用explain分析语句
- 针对常用的where , order by 字段添加索引
- 不要使用超过3个索引在同一张表
- 不要查询多余字段 , 尽量使用覆盖索引
- 避免索引失效的情况 : 最左前缀
- left join左边的表要使用相对小的表
-
列举索引失效的情况
- 违背最左前缀
- like + "%.."
- 查询条件不要使用表达式或者mysql函数
- 字符字段查询不使用引号
-
对索引的理解
- 什么是索引?
mysql引擎用来快速寻找记录的数据结构
- 索引作用 : 通过缩小查询范围查找目标记录, 提高查询效率, 简绍查询IO次数
- 索引分类 [引擎角度] : 主键 , 唯一 , 普通 , 覆盖 , 联合 , 全文
- 索引分类[存储角度] : 聚集索引和非聚集索引
- 索引的原理 : 二分查询 + B+树结构 + 局部性原理 按页大小将全部记录分成若干个页; 从B+tree顶端开始二分查找 ; 找到目标记录所在的叶节点, 读取整页到内存区, 在一页中遍历找到需要的记录; 查询的IO次数等于B+树的高度
- 索引数据结构
- hash
- B+tree
- 局部性原理
- 系统分页大小 : 一页访问字节数受 32位 / 64位主存宽度影响 (8kb)
- innodbPage : 在第一点的基础上优化, 一页大小默认16kb , 减少50%的IO次数
- 索引优化方向
注释:
查询优化本质是索引优化