了解简单的PostgreSQL EXPLAIN

时间:2014-05-17 21:58:40

标签: postgresql explain

我无法理解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

2 个答案:

答案 0 :(得分:1)

The docs(强调补充)说;

  

实际上会显示两个数字:可以返回第一行之前的启动费用,以及返回 所有行 的总费用。对于大多数查询而言,总成本是重要的,但在诸如EXISTS中的子查询之类的上下文中,规划人员将选择最小的启动成本而不是最小的总成本(因为执行者在获得一行之后将停止)。

换句话说,8593.28将是返回所有行的成本,但由于限制,您只返回一个,因此实际成本要低得多(或多或少等于启动成本)

答案 1 :(得分: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)

大胆强调我的。