数据库必知词汇:MySQL查询执行计划(Explain)

MySQL的EXPLAIN命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具。通过执行计划可以了解查询方式、索引使用情况、需要扫描的数据量以及是否需要临时表或排序操作等信息。我们需要分析执行计划对查询进行有的放矢的优化。

需要注意:

  • EXPLAIN不考虑触发器、存储过程或用户自定义函数对查询的影响;
  • EXPLAIN不考虑缓存;
  • EXPLAIN只能分析执行计划,不能显示存储引擎在执行查询过程中进行的操作;
  • 部分统计信息是估算的,并非精确值。

这里以MySQL 5.6版本为基础举例说明。

如下SQL语句:
EXPLAIN SELECT * FROM user
JOIN post ON user.id = post.uid
WHERE user.created_at < '2018-10-01 00:00:00' AND post.status = 1;

输出结果:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE user range PRIMARY,idx_created_at idx_created_at 7 null 19440 Using index condition; Using where; Using temporary; Using filesort
1 SIMPLE post ref idx_uid,idx_status idx_uid 8 user.id 1 Using where

EXPLAIN 的行数为查询涉及的表数, 结果各列的含义为:

  • id: 查询的唯一标识
  • select_type: 查询的类型
  • table: 查询的表, 可能是数据库中的表/视图,也可能是 FROM 中的子查询
  • type: 搜索数据的方法
  • possible_keys: 可能使用的索引
  • key: 最终决定要使用的索引名
  • key_len: 查询索引使用的字节数。通常越少越好
  • ref: 查询的列或常量
  • rows: 需要扫描的行数,估计值。通常越少越好
  • extra: 额外的信息

资料来源:
MySQL 5.7 Reference Manual https://dev.mysql.com/doc/refman/5.7/en/explain.html
Optimizing Queries with EXPLAIN https://dev.mysql.com/doc/refman/5.7/en/using-explain.html

上一篇:数据库必知词汇:PostgreSQL


下一篇:数据库必知词汇:查询优化器