MySQL EXPLAIN性能分析

:1、是什么

  使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句。分析你的查询语句或是表结构的性能瓶颈。

2、能干嘛

  1. 获取表的读取顺序;
  2. 哪些索引可以使用;
  3. 数据读取操作的操作类型;
  4. 哪些索引被实际使用;
  5. 表之间的引用;
  6. 每张表有多少行被物理查询;

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:使用了优化器;

  3.6 其他的信息没太大用处

原文地址:https://www.cnblogs.com/xp2h/p/12463552.html