大家好,欢迎来到IT知识分享网。
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
IT知识分享网
- 估计的启动开销。在输出阶段可以开始之前消耗的时间,例如在一个排序节点里执行排序的时间。
- 估计的总开销。这个估计值基于的假设是计划节点会被运行到完成,即所有可用的行都被检索。 不过实际上一个节点的父节点可能很快停止读取所有可用的行。
- 这个计划节点输出行数的估计值。同样,假定该节点能运行到完成。
- 预计这个计划节点输出的行平均宽度(以字节计算)。
2. 使用EXPLAIN ANALYZE
可以通过使用EXPLAIN的ANALYZE选项来检查规划器估计值的准确性。 通过使用这个选项,EXPLAIN会实际执行该查询, 然后显示真实的行计数和在每个计划节点中累计的真实运行时间,还会有一个普通 EXPLAIN显示的估计值。
IT知识分享网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() 操作系统调用很慢的机器上。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/12479.html