PostgreSQL EXPLAIN

PostgreSQL为每个收到查询产生一个查询计划。 选择正确的计划来匹配查询结构和数据的属性对于好的性能来说绝对是关键的, 因此系统包含了一个复杂的规划器来尝试选择好的计划。 你可以使用EXPLAIN命令察看规划器为每个查询生成的查询规划是什么。

PostgreSQL 9.5.3 中文手册 —— 14.1. 使用EXPLAIN


1. 使用EXPLAIN

例如查询库存移动SQL:

 test=# EXPLAIN SELECT * FROM stock_move;
                          QUERY PLAN
---------------------------------------------------------------
 Seq Scan on stock_move  (cost=0.00..25.13 rows=513 width=450)
(1 row)

EXPLAIN
  1. 估计的启动开销。在输出阶段可以开始之前消耗的时间,例如在一个排序节点里执行排序的时间。
  2. 估计的总开销。这个估计值基于的假设是计划节点会被运行到完成,即所有可用的行都被检索。 不过实际上一个节点的父节点可能很快停止读取所有可用的行。
  3. 这个计划节点输出行数的估计值。同样,假定该节点能运行到完成。
  4. 预计这个计划节点输出的行平均宽度(以字节计算)。
2. 使用EXPLAIN ANALYZE

可以通过使用EXPLAIN的ANALYZE选项来检查规划器估计值的准确性。 通过使用这个选项,EXPLAIN会实际执行该查询, 然后显示真实的行计数和在每个计划节点中累计的真实运行时间,还会有一个普通 EXPLAIN显示的估计值。

test=# EXPLAIN ANALYZE SELECT * FROM stock_move;
                                                QUERY PLAN
-----------------------------------------------------------------------------------------------------------
 Seq Scan on stock_move  (cost=0.00..25.13 rows=513 width=450) (actual time=0.027..0.123 rows=514 loops=1)
 Planning time: 0.301 ms
 Execution time: 0.267 ms
(3 rows)

EXPLAIN

注意"actual time"值是以毫秒计的真实时间,而cost 估计值则以任意的单位表示,因此它们不大可能匹配上。

3. 注意:

在两种有效的方法中EXPLAIN ANALYZE 所测量的运行时间可能偏离同一个查询正常执行时所花费的时间。首先,由于没有输出行被传递到客户端, 所以没有包含网络传输成本和I/O转换成本。其次,由EXPLAIN ANALYZE 所增加的测量开销可能是巨大的,特别是在那些gettimeofday() 操作系统调用很慢的机器上。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值