MySQL 执行计划需要详细查看的内容


1、id(重要):每一个select语句都会分配一个id。

  id相同,从上到下执行

  id不同,id越大,越先执行

  id为null,不查询,仅表示一个结果集

2、select_type(重要):查询类型

  simple:简单查询,不包括子查询,union查询

  primary:select查询字段列中存在子查询

  union:存在union操作,且union操作外还进行查询

  union result:union之后的结果

  derived:查询之后再查询(查询里面嵌套查询)

  subquery:where条件中包含子查询

3、table:显示查询的表名

4、type(重要):判断是否用到索引,执行计划的连接类型

  效率由高到低:system > const > eq_ref > ref > range > index > all

  system:表里只有一行数据或空表

  const:使用唯一索引或主键,或者where条件查询返回1条记录

  eq_ref:join时使用主键或者唯一索引连接,前表的每一个结果,都只匹配到后表的一行结果

  ref:针对非唯一索引等值查询、关联

  range:索引范围扫描,常见的有 >,<,is null,between and,in,like等运算

  index:索引全表扫描,查询的联合索引字段出现在select后,或者where后

  all:全表数据扫描

5、key(重要):真正使用到的索引

6、Extra(重要):

  distinct:使用到了distinct关键字

  no tables used:不带from子句的查询

  using where:使用到了where条件

  using index:查询时不需要回表,可直接通过索引查到数据

  using temporary:临时表存储中间结果(对查询结果order by、group by)

  using filesort:排序时无法使用到索引(常见于order by、group by)

7、rows:扫描的行数

  不是精确值 (lnnoDB不是精确的值,MVISAM是精确的值,主要原因是lnnoDB 里面使用了MVCC并发机制)

posted @ 2024-02-20 14:15  编程小白1024  阅读(73)  评论(0编辑  收藏  举报