本文目录导读:

查看数据库的执行计划是数据库性能调优的核心技能,不同的数据库系统有不同的查看方式,下面分别介绍最常见的几种。
MySQL
使用 EXPLAIN
-- 查看查询的执行计划 EXPLAIN SELECT * FROM users WHERE age > 25; -- 更详细的输出(支持 JSON 格式) EXPLAIN FORMAT=JSON SELECT * FROM users WHERE age > 25; -- 实际执行并显示执行计划 EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25;
输出字段含义:
id:查询的标识符select_type:查询类型(SIMPLE、PRIMARY、SUBQUERY 等)table:涉及的表type:访问类型(ALL、index、range、ref、eq_ref、const、system)possible_keys:可能使用的索引key:实际使用的索引rows:估计扫描的行数Extra:额外信息(Using index、Using filesort 等)
PostgreSQL
使用 EXPLAIN
-- 基本执行计划 EXPLAIN SELECT * FROM users WHERE age > 25; -- 包含实际执行时间和行数 EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25; -- 查看缓冲区使用情况 EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM users WHERE age > 25; -- JSON 格式输出 EXPLAIN (FORMAT JSON) SELECT * FROM users WHERE age > 25;
使用 pgAdmin 图形界面
- 打开查询工具
- 编写 SQL 语句
- 点击 "解释" 或 "分析" 按钮
- 查看图形化的执行计划
Oracle
使用 EXPLAIN PLAN
-- 生成执行计划到 PLAN_TABLE EXPLAIN PLAN FOR SELECT * FROM employees WHERE salary > 5000; -- 查看执行计划 SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
使用自动跟踪
-- 启用自动跟踪 SET AUTOTRACE ON; -- 执行查询 SELECT * FROM employees WHERE salary > 5000; -- 关闭自动跟踪 SET AUTOTRACE OFF;
使用 SQL Developer
- 打开 SQL 工作表
- 编写 SQL
- 按 F10 或点击 "解释执行计划" 图标
SQL Server
使用 SET SHOWPLAN
-- 只显示执行计划,不执行查询 SET SHOWPLAN_XML ON; GO SELECT * FROM users WHERE age > 25; GO SET SHOWPLAN_XML OFF; GO -- 显示实际执行计划 SET STATISTICS PROFILE ON; GO SELECT * FROM users WHERE age > 25; GO SET STATISTICS PROFILE OFF; GO
使用 SSMS 图形界面
- 在查询编辑器中编写 SQL
- 点击 "显示估计的执行计划"(快捷方式:Ctrl+L)
- 或点击 "包含实际的执行计划"(快捷方式:Ctrl+M)
SQLite
-- 查看执行计划 EXPLAIN QUERY PLAN SELECT * FROM users WHERE age > 25;
执行计划关键指标解读
无论使用哪种数据库,都要关注以下几点:
| 指标 | 含义 | 理想情况 |
|---|---|---|
| 扫描方式 | TABLE SCAN(全表扫描) vs INDEX SCAN(索引扫描) | 尽量索引扫描 |
| 预估行数 | 预计扫描的记录数 | 越小越好 |
| 连接方式 | Nested Loop vs Hash Join vs Merge Join | 根据数据量选择 |
| 排序操作 | 是否需要排序 | 尽量利用索引避免排序 |
| 临时表 | 是否创建临时表 | 尽量避免 |
实践建议
- 先看
type字段:出现ALL(全表扫描)通常需要优化 - 关注
rows和Extra:- 大量
rows扫描但Extra显示Using filesort→ 需要优化排序 Using temporary→ 可能产生临时表,注意性能
- 大量
- 对比不同索引:通过
possible_keys和key判断索引是否被正确使用 - 使用
ANALYZE:实际执行后的执行计划更准确,但要注意对生产环境的影响
需要针对具体的慢查询帮助分析执行计划吗?