Explain

Postgres中的寬度解釋?

  • May 26, 2016

解釋 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 的行位置,然後父程序實際輸出行。它並不總是使用,但在某些情況下它比直接讀取行更快。

引用自:https://dba.stackexchange.com/questions/139161