Explain详解与索引最佳引用实践

99 阅读2分钟

Explain使用与详解

图片.png type列:表示关联类型或访问类型 即MySql决定如何查找表中的行,查找数据行记录的大概范围 依次从最优到最差分别为:system>const>eq_ref>ref>range>index>ALL 一般来说 得保证查询能达到range级别,最好达到ref

eq_ref:主键关联的查询 ref:查询条件没用到主键查询(唯一索引) 用普通索引 或者唯一索引的部分前缀 可能查到多条 图片.png range:范围查找(in between > < >=等) 用一个索引来检索给定范围的行 index:扫描全索引就能拿到结果,一般是扫描2级索引

从B+树底层分析常见优化原则

全值匹配 图片.png

最左前缀法则 如果索引了多列 要遵守最左前缀法则 指的是查询从索引的最左前列开始并且不跳过索引中的列

图片.png

不能在索引列上做任何操作(计算 函数 自动或手动转换类型) 会导致索引失效而转向全表扫描 图片.png

存储引擎不能使用索引中范围条件右边的列 图片.png

尽量使用覆盖索引(只访问索引的查询(索引列包含查询列)),减少 select * 语句 图片.png

mysql在使用不等于的时候无法使用索引 导致全表扫描

图片.png

is null,is not null 一般情况下也无法使用索引

like 以通配符开头('$abc...') mysql 索引失效会变成全表扫描操作

like查找 可以用覆盖索引来优化

图片.png

字符串不加单引号 索引会失效

少用 or 或 in 用它查询时 mysql 不一定使用索引 mysql内部优化器会根据检索比例 表大小等多个因素整体评估是否使用索引

范围查询优化(例 给年龄添加单值索引)

图片.png

MySQL索引最佳实践