gpt4 book ai didi

sql - PostgreSQL 解释 : why does child have larger cost than parent?

转载 作者:行者123 更新时间:2023-11-29 12:20:21 25 4
gpt4 key购买 nike

为什么一些较低的规划节点的成本高于最顶层的节点?在 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)

子节点索引扫描比merge join节点的开销更大。文章中还说“重要的是要了解上层节点的成本包括其所有子节点的成本”。

那么为什么 child 的成本比它的 parent 大呢?

最佳答案

如您所见,费用确实包括所有 child 费用 :)子索引的行可能比您加入查询的结果多。因此,如果 tenk1_unique2 是 unique2 和其他一些值的复合唯一键,并且是此连接的最便宜索引,它可以包含 101 行和一个 unique2 值......这样你就有 101 与 1 进行比较并得到 1 行结果。 ..

更新1 parent 的成本是 child 成本的总和。但是加入的 child 的行数更大。但是如果你加入 1 对 101,你会得到 1。所以 parent 可以有 1 行,而 child 有 100 行......

Update2 我想是句子

the cost of an upper-level node includes the cost of all its child nodes

仅对

有效

Estimated start-up cost

更新3

我的同事说估计总成本 (656.28) 在应用过滤器之前出现...

关于sql - PostgreSQL 解释 : why does child have larger cost than parent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29244695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com