爲什麼一些較低規劃節點的成本高於最頂層節點的成本?在this article,我發現這個例子PostgreSQL解釋:爲什麼孩子比父母有更大的成本?
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)
子節點索引掃描比合並連接節點的較大成本。在文章中還指出:「瞭解上層節點的成本包括其所有子節點的成本是很重要的」。
那麼,爲什麼孩子的成本比父母高呢?
注意'explain'只會給你一個_estimate_。如果您運行'explain(analyze,verbose)',那麼它會爲您提供_real_成本和行數。您可能想要將這些與估算值進行比較。 – 2015-03-25 07:22:01
即使這是估計,父母如何估計成本比孩子少?估算算法不會自動增加兒童成本? – ethanjyx 2015-03-25 18:16:09
它看起來像是一個錯誤,或者在文檔中的示例被調整用於顯示目的,這是不正確的修改。正如文檔所述,我能想到的唯一情況是子成本的總和可以超過父項,其中操作被LIMIT子句部分中止。 – 2015-03-25 18:56:05