LAF*_*ica 6 explain postgresql-9.5
在 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)
Run Code Online (Sandbox Code Playgroud)
答案在您所指的文章中:
这里计划器决定使用两步计划:子计划节点访问索引以找到匹配索引条件的行的位置,然后上级计划节点实际上从表本身中获取这些行。
Output这里的词是指物理读取值。子计划不读取值,它只读取行的位置(地址),然后父计划实际读取值。下一句解释了为什么选择两步过程:
单独获取行比顺序读取要昂贵得多,但由于并非必须访问表的所有页面,因此这仍然比顺序扫描便宜。(使用两个计划级别的原因是上计划节点在读取它们之前将索引标识的行位置按物理顺序排序,以最小化单独获取的成本。节点名称中提到的“位图”是一种机制进行排序。)
在后来的文本,你会发现两个子流程的例子,其中一个进程width=244和其他width=0。通常子进程会获取输出为 0 的行位置,然后父进程实际输出行。它并不总是使用,但在某些情况下它比立即读取行更快。
| 归档时间: |
|
| 查看次数: |
1515 次 |
| 最近记录: |