我做了这样的查询
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 ms
执行时间:127.233 ms
为什么是这样 ?我觉得差别太大了
我做了这样的查询
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 ms
执行时间:127.233 ms
为什么是这样 ?我觉得差别太大了
我觉得你的理解有点小。我尝试简要描述运行查询时发生的情况:
EXPLAIN命令打印您对该过程的描述。现在:
EXPLAIN是服务器在步骤 3-4 上花费的时间。EXPLAIN输出时间是服务器仅在步骤 2上花费的时间。我相信您将其视为“时间计划者认为查询将花费”,但这可以称为“计划 [执行] 时间”或“估计执行时间”。所以没有理由为什么计划时间和执行时间差应该更小。PostgreSQL 希望缩短计划时间,以尽量减少对整个执行时间的影响。
一切都在手册中写在这里。
注意:执行时间不包括计划时间,您可以尝试explain analyse select 1 看一个案例 PlanningTime>ExecutionTime。
该EXPLAIN ANALYSE命令做了两件事:它计算 Postgres 计算查询计划所需的时间,其次,它确定查询执行所需的时间。预计提出查询计划比执行查询本身要快得多。EXECUTE如果您提供了命令的完整输出,可能会给您更好的解释。该文档包含相当详细的说明。