MySQL Explain 执行计划详解、写高效SQL、灵活使用索引(实战)

- MySQL的Explain执行计划属性:
- id:数值表示select语句的执行顺序,大的先执行
- select_type
- simple:无子查询和join关键字
- primary:复杂查询最外层语句或union最左的select
- subquery:仅限于from前面的select语句
- derived:可包含from后面的查询,且将中间结果存放到临时表中
- union
- table 表名
- type列(执行效率依次递减)
- null:解析SQL时就能完成,不需要查找表或索引
- system
- const:where id = 1这种
- eq_ref:主键索引或唯一索引与其他字段的关联查询,最多只返回一条记录,on xx.id = xxx.id
- ref:普通索引
- range:范围查询,where id>3这种
- index:按所有索引查找
- all:没有索引因此需要全表查询
- possible_keys:可能使用到的索引,需要视key而定。若possible_key列有值但key为null,则说明该索引对本次查询无效,进而进行全表扫描;如果都为null,则表示没有相关索引,可以视情况创建索引。
- key
- key_len:适用于联合索引时确定哪些索引生效
- ref
- rows:预估要读取的行数,不是结果集的行数
- extra
- using index:判断该字段是否添加索引,有则覆盖伪索引
- using where:where后面没用到索引,可考虑添加索引
- using index condition:前导列。where id =1 and id>3
- using temporary:生成了需要被优化的中间表
- using filesort:数据没通过索引排序,若量小则排在内存中,否则放到磁盘中去排序
- select table optimized:直接从表信息就可以获得结果,不必查表和走索引。举例:type字段里属性为null的情况