Postgres EXPLAIN ANALYZE比正常运行查询要快得多

时间:2010-08-06 02:12:08

标签: sql postgresql sql-execution-plan

我正在尝试优化PostgreSQL 8.4查询。在大大简化了原始查询之后,试图弄清楚是什么让它选择了一个糟糕的查询计划,我得到的结果是在EXPLAIN ANALYZE下运行查询只需要0.5秒,而运行它通常需要2.8秒。那么看起来很明显,EXPLAIN ANALYZE向我展示的并不是它通常做的事情,所以无论它向我展示的是无用的,不是吗?这里发生了什么,我怎么看它真正在做什么?

2 个答案:

答案 0 :(得分:3)

最有可能的是,当您使用EXPLAIN ANALYZE手动运行时,数据页面位于操作系统磁盘缓存中,以便尝试优化查询。在正常环境中运行时,页面可能不在缓存中,必须从磁盘中获取,从而增加了运行时间。

答案 1 :(得分:1)

它显示的时间更少,因为:

1)EXPLAIN ANALYZE显示的总运行时间包括执行程序启动和关闭时间,以及运行任何触发的触发器的时间,但它不会包括解析,重写或计划时间。

2)由于没有输出行传送到客户端,因此不包括网络传输成本和I / O转换成本。

警告!

EXPLAIN ANALYZE添加的测量开销可能很大,尤其是在具有较慢gettimeofday()操作系统调用的机器上。因此,建议使用EXPLAIN (ANALYZE TRUE, TIMING FALSE)