执行计划(Execution Plan)是数据库如何执行SQL语句的详细路线图,了解如何查看执行计划对优化查询性能至关重要。以下是主流数据库查看执行计划的方法:

1. MySQL/MariaDB

基本方法

-- 常规EXPLAIN
EXPLAIN SELECT * FROM users WHERE age > 25;

-- 更详细的分析(MySQL 8.0+)
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25;

输出解读重点:
type:访问类型(从好到差:system > const > eq_ref > ref > range > index > ALL)
key:实际使用的索引
rows:预估需要检查的行数
Extra:额外信息(如Using where, Using index, Using filesort等)

2. PostgreSQL

-- 简单执行计划
EXPLAIN SELECT * FROM users WHERE age > 25;

-- 带实际执行统计
EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25;

-- 更详细格式
EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) SELECT * FROM users WHERE age > 25;

输出解读重点:
Seq Scan vs Index Scan
:全表扫描还是索引扫描
Cost:预估成本(第一个数字是启动成本,第二个是总成本)
Actual Time:实际执行时间
Buffers:缓存使用情况

3. Oracle

-- 生成执行计划
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE department_id = 10;

-- 查看执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

-- 带统计信息的执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(sql_id => 'abc123', format => 'ALLSTATS LAST'));

输出解读重点:
Operation:执行的操作(如TABLE ACCESS FULL, INDEX RANGE SCAN)
Name:操作的对象(表或索引名)
Rows:预估行数
Cost:预估成本
Time:预估执行时间

4. SQL Server

-- 文本格式执行计划
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM users WHERE age > 25;
GO
SET SHOWPLAN_TEXT OFF;

-- 图形化执行计划(SSMS中)
-- 按Ctrl+M打开实际执行计划,然后执行查询

-- XML格式执行计划
SET SHOWPLAN_XML ON;
GO
SELECT * FROM users WHERE age > 25;
GO
SET SHOWPLAN_XML OFF;

输出解读重点
Physical Operation:物理操作(如Clustered Index Scan, Index Seek)
Logical Operation:逻辑操作
Estimated I/O Cost:预估I/O成本
Estimated Subtree Cost:子树总成本
Actual Rows vs Estimated Rows:实际与预估行数对比

5. SQLite

-- 简单执行计划
EXPLAIN QUERY PLAN SELECT * FROM users WHERE age > 25;

-- 更详细的字节码执行计划
EXPLAIN SELECT * FROM users WHERE age > 25;

输出解读重点:
detail:执行细节
scan:扫描方式(如TABLE, INDEX)
using index:是否使用索引

通用执行计划解读技巧
从右向左,从内向外阅读执行计划


重点关注:
全表扫描(TABLE SCAN/FULL SCAN)
高成本操作
预估行数与实际行数差异大的步骤

寻找性能瓶颈:
最昂贵的操作(最高成本或最长时间)
未使用预期索引的情况
不必要的排序或临时表操作

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐