You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中cpu_index_tuple_cost与cpu_tuple_cost为何数值不同?

为什么PostgreSQL中cpu_index_tuple_cost与cpu_tuple_cost数值存在差异?

这两个参数都是查询优化器用来估算CPU处理开销的,但对应完全不同的处理场景,哪怕数据页已在内存中,两者的实际开销也有明显区别:

  • cpu_tuple_cost:估算的是从表的数据页读取完整元组、并执行行级处理(如过滤条件校验、字段投影)的CPU开销。这一步需要解析完整的行结构,处理所有字段,甚至可能涉及类型转换、约束检查等操作,整体CPU消耗更高。
  • cpu_index_tuple_cost:估算的是从索引页读取索引元组的CPU开销。索引元组仅包含索引键值和指向数据页的指针,结构远比完整表元组简单,处理时无需解析全量字段,CPU开销自然更低。

官方将这两个参数分开设置,是为了让优化器能精准区分“处理索引条目”和“处理完整表行”这两种场景的CPU消耗。比如在索引扫描场景中,优化器会计算:遍历索引条目的开销(基于cpu_index_tuple_cost) + 回表读取完整元组的开销(基于cpu_tuple_cost),以此来判断索引扫描是否比全表扫描更高效。如果将两者设为相同值,会导致优化器误判开销,进而选择非最优的执行计划。

内容的提问来源于stack exchange,提问作者abc xyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:20:54