EXPLAIN 执行计划应该看哪些字段

EXPLAIN 执行计划应该看哪些字段

EXPLAIN 是优化 SQL 的入口工具,理解它的输出是每个后端工程师的基本功。本文讲清楚几个关键字段的含义。

准备一张示例表

以订单表为例:

CREATE TABLE orders (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
status VARCHAR(20) NOT NULL,
amount DECIMAL(10,2) NOT NULL,
created_at DATETIME NOT NULL
);

查询订单列表时,很多人会直接写:

SELECT * FROM orders
WHERE user_id = 1001 AND status = 'PAID'
ORDER BY created_at DESC
LIMIT 20;

这时可以考虑组合索引:

CREATE INDEX idx_user_status_time
ON orders(user_id, status, created_at);

必须用 EXPLAIN 验证

优化 SQL 不要凭感觉,先看执行计划:

EXPLAIN SELECT * FROM orders
WHERE user_id = 1001 AND status = 'PAID'
ORDER BY created_at DESC
LIMIT 20;

重点看 key 是否命中索引,rows 是否明显下降。如果只是建了索引但执行计划没变化,那说明索引设计可能不贴合查询条件。

常见坑

  • 在索引列上使用函数,可能导致索引失效。
  • 字段类型不一致,例如字符串和数字混用,会影响优化器选择。
  • 大 offset 分页会越来越慢,可以改成基于 id 的游标分页。

   转载规则


《EXPLAIN 执行计划应该看哪些字段》 小乐 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录