首页 > 解决方案 > PostgreSQL:阅读解释计划

问题描述

我正在运行 Postgres 12。我有一个这样的解释计划:

Sort  (cost=87.71..88.75 rows=418 width=40)
  Sort Key: language.name DESC
  ->  Hash Join  (cost=1.14..69.51 rows=418 width=40)
        Hash Cond: (film.language_id = language.language_id)
        ->  Seq Scan on film  (cost=0.00..66.50 rows=418 width=21)
              Filter: (rating = ANY ('{R,PG-13}'::mpaa_rating[]))
        ->  Hash  (cost=1.06..1.06 rows=6 width=25)
              ->  Seq Scan on language  (cost=0.00..1.06 rows=6 width=25)

据我了解,启动成本等于 0 的节点将是首先运行的节点,因此这两个节点并行运行:

然后这个节点开始运行:哈希(成本=1.06..1.06 行=6 宽度=25)。

然后这个节点:Hash Join (cost=1.14..69.51 rows=418 width=40)

最后:排序(成本=87.71..88.75 行=418 宽度=40)

但是,根据这篇文章:https ://thoughtbot.com/blog/reading-an-explain-analyze-query-plan执行顺序应该是:

那么哪个是正确答案?我误解了执行顺序吗?

标签: postgresqlsql-execution-plan

解决方案


顺序如下:

  • 顺序扫描language

  • 同时,根据结果构建哈希表(哈希表在完成之前无法使用,因此其启动成本等于扫描的总成本)

  • 顺序扫描film

  • 同时,哈希连接是通过探测哈希表来计算的

  • 连接完成后,排序就可以开始了


推荐阅读