1 | id | SQL的执行顺序,执行顺序如下:
- id越大,越先执行;
- id相同,从上到下执行;
|
2 | select_type |
编号 | 类型 | 描述 |
---|
1 | simple | 简单查询,不包含子查询和union查询,可以包括join查询; | 2 | primary | 包含子查询,外查询标记为此类型; | 3 | subquery | 在select或者where后面包括子查询; | 4 | derived | 在from后包括子查询; | 5 | union | 在union后的查询被标记为此类型; | 6 | union result | 从union结果中,select出来结果的查询; |
|
3 | type |
编号 | 类型 | 描述 |
---|
1 | system | 系统表,表中包含一行记录; | 2 | const | 通过索引命中单行记录; | 3 | eq_ref | 扫描主键或者唯一索引,命中单行或者多行返回; | 4 | ref | 扫描非主键和非唯一索引,命中单行或者多行返回; | 5 | range | 扫描索引,选择一个范围的值;between,> or < etc. | 6 | index | 遍历索引树,返回所有行; | 7 | all | 全表扫描; |
【注】我们一般优化SQL至少会到range级别,从上到下性能减弱; |
4 | possible_keys | 可能使用到的索引; |
5 | key | 实际使用到的索引; |
6 | key_len | 索引长度,单位字节key的长度建议不要太长,太长的话,需要考虑用前缀索引优化,对于主键一定要求使用bigint,防止在插入新行的时候产生页分裂带来的性能问题; |
7 | ref | 显示该表的索引字段关联了哪张表的哪个字段; |
8 | rows | SQL执行所涉及到的行数; |
9 | filtered | 返回结果的行数占读取行数的百分比,值越大越好; |
10 | extra |
编号 | 字段 | 描述 |
---|
1 | using filesort | 使用了索引外排序,性能非常差,造成额外的I/O; | 2 | using temporary | 使用了临时表,性能也是比较差的,常见在order by和group by的语句中; | 3 | using index | 走覆盖索引,性能不错,避免回表; | 4 | using where | 用了where子句; | 5 | using join buffer | 使用了连接查询,并且使用了缓存;建议在join的字段上加上索引; | 6 | distinct | 行去重; |
|