← [ BACK_TO_NOTES ]

用 EXPLAIN 分析 MySQL 和 PostgreSQL 查询计划

用 EXPLAIN 和 EXPLAIN ANALYZE 观察数据库如何执行查询,是学习索引和优化的第一步。

#howto #growing #backend #mysql #postgresql

[!info] related notes

用 EXPLAIN 分析 MySQL 和 PostgreSQL 查询计划

目标

通过最小例子看懂数据库到底是全表扫描、索引扫描,还是做了代价更高的连接和排序。

前置条件

  • 有一张可查询的测试表
  • 知道某个字段上是否建了索引

步骤

  1. 先准备一个带索引的查询条件
CREATE INDEX idx_users_email ON users(email);
  1. 在 MySQL 中执行
EXPLAIN
SELECT id, name
FROM users
WHERE email = 'alice@example.com';
  1. 在 PostgreSQL 中执行
EXPLAIN ANALYZE
SELECT id, name
FROM users
WHERE email = 'alice@example.com';
  1. 重点看三个问题:
  • 是全表扫描还是索引扫描
  • 预计扫描多少行
  • 真实扫描代价和估计是否接近

验证

  • 去掉索引后再跑一遍,观察计划变化
  • 改成一个命中很多行的条件,再观察优化器是否仍然选择索引

常见问题

  • MySQL 常用 EXPLAIN;PostgreSQL 更常把 EXPLAIN ANALYZE 当成学习入口
  • 不要只看“有没有用索引”,还要看扫描行数、回表成本和排序代价
  • ANALYZE 会真的执行查询,在线上环境要谨慎对待重查询
创建于 2026/5/3 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本