我无法理解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
答案 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)
大胆强调我的。