MySQL Explain执行计划详解与SQL优化实战
请详细解释MySQL中EXPLAIN执行计划各字段的含义(id、select_type、type、possible_keys、key、rows、Extra等)。如何根据执行计划进行SQL优化?
回答
苦行僧
EXPLAIN关键字段:
- id:查询序号,id越大越先执行,id相同从上到下执行
- select_type:SIMPLE(简单查询)、PRIMARY(主查询)、SUBQUERY(子查询)、DERIVED(派生表)、UNION等
- type(重点):性能从好到差:
- system > const > eq_ref > ref > range > index > ALL
- const:主键/唯一索引等值查询,最多匹配一行
- eq_ref:联表时使用主键/唯一索引
- ref:普通索引等值查询
- range:范围查询
- index:遍历索引树
- ALL:全表扫描(最差)
- possible_keys:可能用到的索引
- key:实际使用的索引
- rows:预估扫描行数
- Extra:Using index(覆盖索引)、Using filesort(文件排序需优化)、Using temporary(临时表需优化)
优化目标:type至少达到range(最好ref或const),Extra避免Using filesort和Using temporary,rows尽可能小。