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

Postgres 14创建覆盖索引后查询仍出现Bitmap Heap Scan原因咨询

执行计划不一致的具体原因
  • 可见性映射表(Visibility Map, VM)未更新:PostgreSQL 要触发*仅索引扫描(Index Only Scan)*实现0堆读取的核心前提是,查询涉及的所有数据页在可见性映射表中被标记为「对所有事务可见」,不需要回表校验行的可见性。刚导入的pagila示例库如果没有执行过VACUUM film;操作,可见性映射表没有生成对应数据块的可见标记,优化器就不会选择仅索引扫描,转而使用Bitmap扫描路径。
  • 优化器成本评估差异:如果你的查询命中的行数多于课程示例的命中行数,优化器会评估认为Bitmap扫描的随机IO成本比仅索引扫描更低,就会优先选择Bitmap Heap Scan路径。你可以执行EXPLAIN ANALYSE VERBOSE查看两种执行路径的cost估算值验证该判断。
  • 统计信息过时:如果film表的统计信息长期未更新,优化器对扫描行数、IO成本的估算会出现偏差,也会导致执行计划选择错误,你可以先执行ANALYZE film;更新表统计信息后再重新执行查询测试。
  • 你也可以手动临时关闭Bitmap扫描验证:执行SET enable_bitmapscan = off;后重新运行查询,如果此时执行计划切换为仅索引扫描且heap fetches为0,就可以确认是优化器成本评估优先级的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:05