mysql explain执行计划

时间:2022-06-06 01:26:11

一、执行计划有什么用?

mysql explain执行计划

mysql explain执行计划

 二、主要指标:

1. select_type
• SIMPLE:简单的查询(没有union或子查询)
• PRIMARY:最外层的查询(有union或子查询)
• DERIVED:衍生表查询(FROM语句中的子查询)

2. type
• 从优到差排序如下:
const:只匹配一行,根据主键或唯一键进行查询
eq_ref:单行关联查询,根据主键或唯一键进行join
ref:索引键值查询,根据普通索引进行查询或join
range:索引范围查询
index:索引扫描查询
all:全表扫描查询

 3. possible_keys

优化器可能用到的索引

4. key

实际用到的索引,没有则为null

5. rows

预估检查行数

三、执行计划的原则
• 查询类型保持为SIMPLE
• 避免index和all
• 确保用到索引,key不能为NULL • 检查行数rows越少越好
• 禁止temporary(MySQL需要进行额外的排序来获取数据)和filesort(MySQL需要创建临时表来存放数据)

四、MySQL性能规范:
规范1
禁止 Select *
禁止 Or,使用Union(All)
禁止 Select for update(用乐观锁)
禁止 Delete(特别是全量delete),用Update做 软删除
禁止关联子查询
禁止条件字段函数,与隐式类型转换

规范2
• 一切Batch化:
limit M, N,不超过100ms
Batch insert :1000~5000行一个批次,操 作时间<1s
IN(id1,id2 , ... , idn):列表控制在100~ 500,响应时间<100ms

规范3
• 禁止执行计划中的Filesort: – 合理的索引
Order by NULL避免多余排序
使用Join/Group by/Distinct,必须参考 filesort原则