为什么某些较低规划的节点的成本高于最高节点的成本?在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)
子节点索引扫描的成本比合并连接节点的成本更高。在文章中它还说“重要的是要理解上层节点的成本包括其所有子节点的成本”。
那么为什么孩子的成本要高于其父母?
答案 0 :(得分:1)
如您所见,成本确实包括所有儿童费用:) 并且子索引的行可能比您在查询中加入的结果更多。因此,如果tenk1_unique2是unique2上的复合唯一键,并且是其他值,并且是此连接的最便宜的索引,则它可以容纳101行,其中包含一个unique2值...这样,您可以比较101并且在结果中有1行。 ..
<强> UPDATE1 强> 父母的成本是儿童成本的总和。但是连接中的子项的行数更大。但如果你加1对101,你得到1的结果。所以父母可以有1行,而孩子有100行...
Update2 我猜想是
上级节点的成本包括其所有子节点的成本
仅对
有效预计启动费用
<强> UPDATE3 强>
我的同事说,在应用过滤器之前估计总费用(656.28)......