小编典典

位图堆扫描性能

sql

我有一张大桌子。位图堆扫描步骤需要5秒钟以上。

有什么我可以做的吗?我在表中添加了列,对它使用的索引重新索引会有所帮助吗?

我对数据进行合并和求和,所以我不会将50万条记录返回给客户端。
我使用postgres 9.1。
这里的解释:

 Bitmap Heap Scan on foo_table  (cost=24747.45..1339408.81 rows=473986 width=116) (actual time=422.210..5918.037 rows=495747 loops=1)
   Recheck Cond: ((foo_id = 72) AND (date >= '2013-04-04 00:00:00'::timestamp without time zone) AND (date <= '2013-05-05 00:00:00'::timestamp without time zone))
   Filter: ((foo)::text = 'foooooo'::text)
   ->  Bitmap Index Scan on foo_table_idx  (cost=0.00..24628.96 rows=573023 width=0) (actual time=341.269..341.269 rows=723918 loops=1)

询问:

explain analyze
SELECT CAST(date as date) AS date, foo_id, ....
from foo_table
where foo_id = 72
and date >= '2013-04-04'
and date <= '2013-05-05'
and foo = 'foooooo'

Index def:
Index "public.foo_table_idx"
   Column    |            Type
-------------+-----------------------------
 foo_id      | bigint
 date        | timestamp without time zone

 btree, for table "public.external_channel_report"

表格:
footext具有4个不同值的字段。
foo_id目前bigint具有10K个不同的值。


阅读 246

收藏
2021-03-23

共1个答案

小编典典

(foo_id, foo, date)(按此顺序)上创建一个复合索引。

请注意,如果您选择500k条记录(并将它们全部返回给客户端),这可能会花费很长时间。

您确定您需要客户端上的所有500k记录(而不是某种汇总或LIMIT)吗?

2021-03-23