cost 和 actual time 的兩個數字是「啟動..總計」,不是範圍

執行計畫每個節點都帶兩組 a..b。那不是「介於 a 到 b 之間」——很多教學都這樣解釋,是錯的。

Seq Scan on example  (cost=0.00..14.30 rows=430 width=159)
                     (actual time=0.016..0.021 rows=19 loops=1)
寫法左邊那個數字右邊那個數字
cost=0.00..14.30啟動成本:吐出第一列之前要付的成本總成本:拿到最後一列的成本
actual time=0.016..0.021拿到第一列的時間拿到最後一列的時間

actual time 的單位是毫秒(ms),不是秒。

為什麼這個分別要緊

因為啟動成本高/總成本低的計畫,和啟動成本低/總成本高的計畫,適用的場景完全相反:

排序、雜湊、聚合  → 啟動成本高(要先把資料全部收完才吐得出第一列)
逐列掃描          → 啟動成本低(讀到一列就能吐一列)

所以查詢有 LIMIT 的時候,資料庫會偏好啟動成本低的計畫——它只需要前幾列,沒必要付那個先收完全部的代價。

把兩個數字讀成「範圍」,就完全看不出這件事。

節點之間的層級關係見 執行計畫是一棵樹,從下往上讀;rows 那一組數字的讀法見 估計和實際差很多,代表資料庫對這張表的認識壞了。