MySQL EXPLAIN性能分析
:1、是什么
使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句。分析你的查询语句或是表结构的性能瓶颈。
2、能干嘛
- 获取表的读取顺序;
- 哪些索引可以使用;
- 数据读取操作的操作类型;
- 哪些索引被实际使用;
- 表之间的引用;
- 每张表有多少行被物理查询;
3、字段说明
3.1 id
表示查询中执行select子句或操作表的顺序;
每个id号码,表示一趟独立的查询。一个sql的查询躺输越少越好。
id相同,执行顺序自上而下;
id不同,值大的先执行;
3.2 type
最好system > const > eq_ref >ref >range > index >all,一般来说,得保证查询至少达到range级别,最好能达到ref级别。
-
- system:表只有一行记录;
- const:表示通过索引一次就找到了,const用于pk或unique索引的;
- eq_ref:唯一性索引扫描;
- ref:非唯一性索引扫描;
- range:只检索了范围;
- index:使用了索引但是没用通过索引进行过滤,一般是使用了覆盖索引或是利用索引进行了排序分组;
- All:全表扫描;
3.3 key_len
命中索引长度,组合索引中命中长度越大效率越高。
3.4 rows
物理扫描行数,越少越好。
3.5 extra
包含不适合在其他列中显示但十分重要的额外信息;
-
- Using filesort:order by没用上索引,手工排序,效率低;
- Using temporary:group by(包含一个order by)没用上索引,效率更低;
- Using index:用了索引;
- Using where:where条件使用了索引;
- Using join buffer:两个表关联字段没用上索引;
- impossible where:sql条件有问题;
- select tables optimized away:使用了优化器;