解释 Postgres 中的计划有宽度,(每个文档)是:
此计划节点输出的行的估计平均宽度(以字节为单位)。
我的问题:宽度何时为 0?因为在文档的示例中,有时是这样的,如下所示:
EXPLAIN SELECT * FROM tenk1 WHERE unique1 < 100;
QUERY PLAN
------------------------------------------------------------------------------
Bitmap Heap Scan on tenk1 (cost=5.07..229.20 rows=101 width=244)
Recheck Cond: (unique1 < 100)
-> Bitmap Index Scan on tenk1_unique1 (cost=0.00..5.04 rows=101 width=0)
Index Cond: (unique1 < 100)
答案在您所指的文章中:
这里的词是指对值
Output
的物理读取。子计划不读取值,它只读取行的位置(地址),然后父计划实际读取值。下一句解释了为什么选择两步过程:稍后在本文中,您将找到两个子进程的示例,其中一个进程具有
width=244
,另一个具有width=0
. 通常子进程将获取输出为 0 的行位置,然后父进程实际输出行。它并不总是使用,但在某些情况下它比直接读取行更快。