#27126·risingwave

`IndexCost::le` 尽管名字上是严格的 `<`,但其成本矩阵文档与代码有所偏离

作者: yuhao-su创建于 2026年9月16日更新于 2026年9月18日
标签type/refactorA-optimizer
  1. IndexCost::le 是一个严格的 <。在所有四个调用位置(select_index_access_path 中的三个,streaming_index_selection_rule.rs 中的一个),min_cost 都以 primary_cost 为种子:
  • 如果条件相等,则优先使用主表,即除非成本更低,否则不要使用索引;
  • IndexCost::new 限制在 maximum() = 10_000_000,而 Default 也是 maximum()(无论估算器是否能分析谓词),因此在大型表中 - 无谓词乘数为 4000,因此行大小 >= 2500 会饱和 - 主表和 每个 索引都落在 10,000,000 处。严格的 < 就是使规划器在该位置回退到基表的原因。使用 <=,每个索引都会在上限处相等,选择会退化为目录顺序,成本模型则贡献不了任何东西。

内容来源: risingwavelabs/risingwave