首页 > 解决方案 > 为什么位图堆扫描的成本与行数不成线性关系

问题描述

我在 postgres 中有两个分析解释输出的两个部分:

   ->  Bitmap Heap Scan on changegroup cg  (cost=332.95..23432.90 rows=17616 width=16) (actual time=1.728..68.845 rows=18091 loops=1)
         Recheck Cond: (issueid = 371928)
         Heap Blocks: exact=1606

   ->  Bitmap Heap Scan on changeitem ci  (cost=4439.94..87423.34 rows=205872 width=17) (actual time=65.291..4281.683 rows=208856 loops=1)
     Recheck Cond: ((field)::text = 'Flaky Count'::text)
     Heap Blocks: exact=25026

Postgres 预测第二个查询的成本将比第一个查询高 4 倍,尽管预测的行数超过 10 倍。

另一个奇怪的是,第二个查询的实时时间不仅长了 10 倍,甚至是 80 倍左右。

为什么成本甚至与行数不成线性关系,为什么时间与行数呈线性关系?

标签: postgresqldatabase-performance

解决方案


推荐阅读