我做了这样的查询
EXPLAIN (ANALYZE ,BUFFERS )
SELECT COUNT(id) q, day
FROM my_table
WHERE role_id && ARRAY[15, 17]
GROUP BY "day"
ORDER BY "day" DESC;
Postgres用这个回答我:
规划时间:0.286毫秒
执行时间:127.233毫秒
这是为什么?我觉得差异太大了
答案 0 :(得分:23)
我认为对你的误解很小。我试着简要描述运行查询时会发生什么:
EXPLAIN
命令打印出您对该过程的描述。现在:
EXPLAIN
输出上的执行时间是时间服务器在步骤3-4上花费的时间。
{li> 计划时间 EXPLAIN
输出时间服务器仅花费在第2步上。我相信你认为它是"时间规划师认为查询将采用" ,但这可以被称为"计划[执行]时间"或者"估计执行时间"。
所以没有理由为什么计划时间和执行时间差应该更小。 PostgreSQL希望缩短计划时间,以最大限度地减少它对整个执行时间的影响。
全部写成here in manual。
注意:执行时间不包括计划时间,您可以尝试explain analyse select 1
查看PlanningTime>ExecutionTime
的案例。
答案 1 :(得分:0)
EXPLAIN ANALYSE
命令执行两项操作:它计算Postgres计算查询计划所需的时间,其次,它确定查询执行的时间。预计提出查询计划比执行查询本身要快得多。如果您提供了EXECUTE
命令的完整输出,则可以为您提供更好的解释。该文档包含一个detailed explanation。