postgresql - 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 的节点将是首先运行的节点,因此这两个节点并行运行:
胶片上的 Seq 扫描(成本=0.00..66.50 行=418 宽度=21)
Seq Scan on language (cost=0.00..1.06 rows=6 width=25)
然后这个节点开始运行:哈希(成本=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执行顺序应该是:
Seq Scan on language (cost=0.00..1.06 rows=6 width=25)
哈希(成本=1.06..1.06 行=6 宽度=25)
胶片上的 Seq 扫描(成本=0.00..66.50 行=418 宽度=21)
哈希联接(成本=1.14..69.51 行=418 宽度=40)
排序(成本=87.71..88.75 行=418 宽度=40)
那么哪个是正确答案?我误解了执行顺序吗?
解决方案
顺序如下:
顺序扫描
language
同时,根据结果构建哈希表(哈希表在完成之前无法使用,因此其启动成本等于扫描的总成本)
顺序扫描
film
同时,哈希连接是通过探测哈希表来计算的
连接完成后,排序就可以开始了
推荐阅读
- python - 更改由 sklearn.model_selection.train_test_split 产生的数组中的值类型
- xml - Remove duplicates considering all element values
- java - Java-EE 创建的 WebDrivers 过期
- html - 具有多个元素的 CSS 浮动 2 列布局
- python - 如何打印keras Multi输出的混淆矩阵?
- excel - 在 VBA 中是否可以在 ThisworkBook 中获取 Friend 属性?
- git - 无法推送到 Azure DevOps git repo - 它没有要求用户名
- postgresql - 下载 PostgreSQL 10.4
- java - java中的板球运动员类
- java - EclipseLink:忽略缓存并直接从数据库获取数据