2014-05-17 38 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)

大胆重视我的。