我正在尝试优化PostgreSQL 8.4查询。在大大简化了原始查询之后,试图弄清楚是什么让它选择了一个糟糕的查询计划,我得到的结果是在EXPLAIN ANALYZE下运行查询只需要0.5秒,而运行它通常需要2.8秒。那么看起来很明显,EXPLAIN ANALYZE向我展示的并不是它通常做的事情,所以无论它向我展示的是无用的,不是吗?这里发生了什么,我怎么看它真正在做什么?
答案 0 :(得分:3)
最有可能的是,当您使用EXPLAIN ANALYZE手动运行时,数据页面位于操作系统磁盘缓存中,以便尝试优化查询。在正常环境中运行时,页面可能不在缓存中,必须从磁盘中获取,从而增加了运行时间。
答案 1 :(得分:1)
它显示的时间更少,因为:
1)EXPLAIN ANALYZE
显示的总运行时间包括执行程序启动和关闭时间,以及运行任何触发的触发器的时间,但它不会包括解析,重写或计划时间。
2)由于没有输出行传送到客户端,因此不包括网络传输成本和I / O转换成本。
EXPLAIN ANALYZE添加的测量开销可能很大,尤其是在具有较慢gettimeofday()操作系统调用的机器上。因此,建议使用EXPLAIN (ANALYZE TRUE, TIMING FALSE)
。