Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 为什么计划时间和执行时间如此不同?_Postgresql_Query Planner - Fatal编程技术网

Postgresql 为什么计划时间和执行时间如此不同?

Postgresql 为什么计划时间和执行时间如此不同?,postgresql,query-planner,Postgresql,Query Planner,我提出这样的疑问 EXPLAIN (ANALYZE ,BUFFERS ) SELECT COUNT(id) q, day FROM my_table WHERE role_id && ARRAY[15, 17] GROUP BY "day" ORDER BY "day" DESC; 博士后对我的回答是: 计划时间:0.286毫秒 执行时间:127.233毫秒 为什么会这样?差异太大了,我认为解释分析

我提出这样的疑问

EXPLAIN (ANALYZE ,BUFFERS )
        SELECT COUNT(id) q, day
        FROM my_table
        WHERE role_id && ARRAY[15, 17]
        GROUP BY "day"
        ORDER BY "day" DESC;
博士后对我的回答是:

计划时间:0.286毫秒
执行时间:127.233毫秒


为什么会这样?差异太大了,我认为解释分析命令做了两件事:它计算出计算查询计划所需的Postgres时间;其次,它确定执行查询所需的时间。预计提出查询计划要比执行查询本身快得多。如果您提供了
EXECUTE
命令的完整输出,可能会给出更好的解释。文档中包含了一个相当复杂的问题。

我认为您有一点误解。我试着简要描述一下运行查询时发生的情况:

  • 你用SQL写一个查询,这是一种“脚本”,你试图告诉服务器你想从他那里得到什么
  • 大多数情况下,服务器可以通过编写查询来收集您要求的数据。这就是所谓的“查询计划器”机制发挥作用的地方。它试图找到执行查询的最快方式(计划)。它是通过估计几种可能的方法(计划)的执行时间来实现的
  • 服务器使用被认为是最快的计划运行查询
  • 服务器返回您的输出
  • EXPLAIN
    命令打印该过程的描述。现在:

    • 解释上的执行时间输出是服务器在步骤3-4上花费的时间
    • 解释上的计划时间输出是服务器仅在步骤2上花费的时间。我相信您会将其视为“时间规划师认为查询需要花费的时间”,但这可以称为“计划[执行]时间”或“估计执行时间”
    因此,没有理由认为计划时间和执行时间差应该更小。PostgreSQL希望缩短计划时间,以尽量减少计划时间对整个执行时间的影响。

    一切都写下来了



    注意:执行时间不包括计划时间,您可以尝试
    explain-analysis-select 1
    查看
    PlanningTime>ExecutionTime

    您认为这是为什么?为什么你认为计划时间和执行时间之间应该有关系?很抱歉,我认为这是错误的。简单的回答是:计划时间不是预期的执行时间,而是用来猜测如何执行查询的时间。我对它的理解也是错误的。它是
    ANALYZE
    而不是
    ANALYZE
    @Gabriel'sMessanger:两者都是valid@a_horse_with_no_name谢谢,我不知道。PostgreSQL让英语和美式英语都很舒服。分析和分析都是有效的。当使用
    解释命令时,
    总查询运行时
    在历史上意味着什么
    @Gabriel's Messanger-极好的回答-礼貌、彻底、易于理解,并带有文档链接。:)注意,执行时间不包括步骤2。我见过解释时间比执行时间高,所以它们不会重叠。