2014-05-17 35 views
1

我無法理解EXPLAIN很簡單的查詢:瞭解簡單的PostgreSQL的EXPLAIN

select * from store order by id desc limit 1; 
QUERY PLAN Limit (cost=0.00..0.03 rows=1 width=31) 
    -> Index Scan Backward using store_pkey on store (cost=0.00..8593.28 rows=250000 width=31) 

爲什麼頂級節點(限制)花費比嵌套(索引掃描)還低?我從文件中看到它應該是累計成本,即8593.28 + 0.03

回答

1

The docs(強調加)說;

實際上顯示了兩個數字:第一行之前的啓動成本可以返回,總成本返回所有行。對於大多數查詢來說,總成本是重要的,但是在諸如EXISTS中的子查詢等上下文中,規劃者將選擇最小的啓動成本而不是最小的總成本(因爲執行器在獲得一行後會停止)。

換句話說,8593.28將返回所有行的成本,但由於限制你只返回一個這樣的實際成本要低得多(或多或少等於啓動成本)

0

您在頂部節點(0.00..0.03)看到的數字是(per documentation

  • 0.00 ..節點的估計啓動成本
  • 0.03 ..節點

如果你想實際總次數的估計總成本,運行EXPLAIN ANALYZE,其中追加實際時間爲每個節點。像:

限制(成本= 0.29..0.31行= 1米寬度= 30)(實際時間= xxx.xxx..xxx.xxx行= 1個循環= 1)

大膽重視我的。