为什么一些较低的计划节点的成本比最高的节点高?在this article中,我发现了这个例子
EXPLAIN SELECT *
FROM tenk1 t1, onek t2
WHERE t1.unique1 < 100 AND t1.unique2 = t2.unique2;
QUERY PLAN
------------------------------------------------------------------------------------------
Merge Join (cost=198.11..268.19 rows=10 width=488)
Merge Cond: (t1.unique2 = t2.unique2)
-> Index Scan using tenk1_unique2 on tenk1 t1 (cost=0.29..656.28 rows=101 width=244)
Filter: (unique1 < 100)
-> Sort (cost=197.83..200.33 rows=1000 width=244)
Sort Key: t2.unique2
-> Seq Scan on onek t2 (cost=0.00..148.00 rows=1000 width=244)
子节点索引扫描的开销大于合并联接节点。在这篇文章中,它还说“重要的是要理解,上层节点的成本包括其所有子节点的成本”。
那么,为什么孩子的成本比父母高呢?
最佳答案
正如你所见,成本确实包括所有的儿童成本:)
子索引的行数可能比查询中的结果多。因此,如果tenk1_unique2是unique2上的复合唯一键和其他值,并且是此联接的最便宜索引,则它可以容纳101行,其中一个unique2值为。。。这样你就有了101和1比较,结果是1行。。。
更新1
父成本是子成本的总和。但是join中的子节点的行数更大。但如果你加入1对101,你会得到1的结果。所以父行可以有一行,而子行可以有100行。。。
更新2我想是sentense
上层节点的成本包括其所有子节点的成本
仅对
预计启动成本
更新3
我的同事说,估计的总成本(656.28)是在应用过滤器之前。。。
关于sql - PostgreSQL解释:为什么 child 的成本比 parent 高?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29244695/