MySQL中的explain语句是什么?

MySQL中的EXPLAIN语句用于分析SELECT语句的执行计划,可以帮助用户判断查询效率并作出相应的优化。

EXPLAIN语法格式:

EXPLAIN SELECT ...;

执行计划包含的信息:

  • table:查询涉及的表
  • type:访问类型(系统、联合、索引等)
  • possible_keys:可能使用的索引
  • key:实际使用的索引
  • key_len:索引长度
  • rows:扫描行数
  • extra:额外信息

例1:

sql
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(20)
);

INSERT INTO users VALUES 
(1, 'John'),(2, 'Emma'), (3, 'Brad'), (4, 'Travis');

EXPLAIN SELECT * FROM users WHERE name = 'John';

输出:

+----+-------------+-------+------------+------+---------------+------+---------+-------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | rows  | 
+----+-------------+-------+------------+------+---------------+------+---------+-------+
|  1 | SIMPLE      | users | NULL       | ref  | PRIMARY       | name | 303     |     1 |
+----+-------------+-------+------------+------+---------------+------+---------+-------+

解析:

  • table:users 访问users表
  • type:ref 根据name字段的值查找数据
  • possible_keys:PRIMARY 可能使用主键索引
  • key:name 实际使用name索引
  • key_len:303 索引长度
  • rows:1 预计返回1条数据

例2:

sql
SELECT * FROM users WHERE name > 'M';

输出:

+----+-------------+-------+------------+------+---------------+------+---------+------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | rows |
+----+-------------+-------+------------+------+---------------+------+---------+------+
|  1 | SIMPLE      | users | NULL       | ALL  | NULL          | NULL | NULL    |  3   |
+----+-------------+-------+------------+------+---------------+------+---------+------+

解析:

  • type:ALL 全表扫描
  • possible_keys:NULL 没有可用索引
  • key:NULL 未使用索引
  • key_len:NULL 索引长度(全表扫描,无索引)
  • rows:3 预计返回3条数据

EXPLAIN的重要作用:

  1. 分析当前SELECT查询语句的执行计划,判断是否有性能问题。
  2. 根据ANALYZE оптimize次数,判断是否应该添加新的索引来提高性能。
  3. 比较不同SQL的EXPLAIN结果,选取最优的执行计划。
  4. 监控数据库性能,发现性能下降的原因。