用explain命令显示SQL的执行计划,命令格式如下:
explain [option] statement;
其中,option是命令的可选选项,包括:
| analyze | boolean | 通过实际执行SQL获得相应的执行计划 |
| verbose | boolean | 显示执行计划的附件信息 |
| costs | boolean | 显示计划节点的启动成本,总成本,估计行数和每行宽度 |
| buffers | boolean | 显示缓冲区使用的信息(只能与analyze一起使用) |
| format | text | xml | json | yaml | 指定输出格式 |
1.基本执行计划
explain select * from "Family1" where "ID" <4;

(1)Seq Scan on "Family1" 表示顺序扫描表Family1。
(2)cost=0.00..16.63 中 0.00表示返回第一行的时间(启动时间),16.63表示返回所有数据的时间(执行时间)。
(3)rows=177 表示会返回177行。
(4)width=124 表示每行平均宽度为124字节。
(5) Filter: ("ID" < 4) 过滤条件,当扫描数据行时,找出满足过滤条件的行。
2.analyze
加上参数analyze,可以通过实际执行SQL语句获得更精确的执行计划。
explain analyze select * from "Family1" where "ID" <4;

actual time=0.483..0.484 rows=2 loops=1 实际启动时间0.483,执行时间0.484 返回行数2。
3.buffer
联合使用analyze 和buffers,通过执行来查看实际代价和缓冲区命中的情况。
explain (analyze true,buffers true) select * from "Family1" where "ID" <4;

Buffers: shared hit=1 共享内存中直接读到1个块。
4. format
指定输出的执行计划为json格式。
explain (format json) select * from "Family1" where "ID" <4;

SQL执行计划详解
本文详细介绍了如何使用explain命令查看SQL执行计划,包括基本执行计划、analyze、buffers参数的使用及输出格式的选择,帮助理解数据库查询优化。
1582

被折叠的 条评论
为什么被折叠?



