mysql explain使用方法

explain就是SQL的执行计划,通过执行计划,我们可以了解sql的执行当中的一些细节。
使用方法为在SQL语句前加explain
得到结果如下:

mysql> explain select id,c1 from t1 where c1=4398825;
+----+-------------+-------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+---------+-------------+
| 1 | SIMPLE | t1 | ALL | NULL | NULL | NULL | NULL | 4992210 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)

各列功能如下:

  • id: 按照sql语法解析后分层后的编号,可能重复
  • select_type:
    • SIMPLE,简单的select查询,不使用union及子查询
    • PRIMARY,最外层的select查询
    • UNION,UNION 中的第二个或随后的 select 查询,不依赖于外部查询的结果集
    • DEPENDENT UNION,UNION 中的第二个或随后的 select 查询,依赖于外部查询的结果集
    • SUBQUERY,子查询中的第一个 select 查询,不依赖于外部查询的结果集
    • DEPENDENT SUBQUERY,子查询中的第一个 select 查询,依赖于外部查询的结果集
    • DERIVED,用于 from子句里有子查询的情况。 MySQL会递归执行这些子查询, 把结果放在临时表里。
    • UNCACHEABLE SUBQUERY,结果集不能被缓存的子查询,必须重新为外层查询的每一行进行评估。
    • UNCACHEABLE UNION,UNION 中的第二个或随后的 select 查询,属于不可缓存的子查询
  • table:涉及的表,如果SQL中表有赋别名,这里出现的是别名
  • type:
    • system,从系统表读一行。这是const联接类型的一个特例。
    • const,表最多有一个匹配行,它将在查询开始时被读取。因为仅有一行,在这行的列值可被优化器剩余部分认为是常数。const表很快,因为它们只读取一次!
    • eq_ref,查询条件为等于
    • ref,条件查询不等于
    • ref_or_null,同ref(条件查询),包含NULL值的行。
    • index_merge,索引联合查询
    • unique_subquery,利用唯一索引进行子查询
    • index_subquery,用非唯一索引进行子查询
    • range,索引范围扫描
    • index,索引全扫描
    • ALL,全表扫描。
  • possible_keys:可能使用的索引
  • key:sql中使用的索引
  • key_len:索引长度
  • ref:使用哪个列或常数与key一起从表中选择行。
  • rows:显示MYSQL执行查询的行数,简单且重要,数值越大越不好,说明没有用好索引
  • Extra:该列包含MySQL解决查询的详细信息。
    • Distinct,去重,返回第一个满足条件的值
    • Not exists 使用not exists查询
    • Range checked for each record,有索引,但索引选择率很低
    • Using filesort,有序查询
    • Using index,索引全扫描
    • Using index condition,索引查询
    • Using temporary,临表表检索
    • Using where,where条件查询
    • Using sort_union,有序合并查询
    • Using union,合并查询
    • Using intersect,索引交叉合并
    • Impossible WHERE noticed after reading const tables,读取const tables,查询结果为空
    • No tables used,没有使用表
    • Using join buffer (Block Nested Loop),使用join buffer(BNL算法)
    • Using MRR(Multi-Range Read ) 使用辅助索引进行多范围读

转载自:https://segmentfault.com/a/1190000006726948#articleHeader14

猜你喜欢

转载自blog.csdn.net/qq1332479771/article/details/88115557