PostgreSQL位图堆扫描需要很长时间

时间:2016-12-13 07:37:27

标签: postgresql query-optimization

我有Case表,它有近25,000,000行和176列(主要是varchar)

select
    count(ca.id)
from
    salesforce.case ca
where
    ca.accountid = '001i000000E'    
    AND ca.createddate BETWEEN current_date - interval '6 months' AND current_date

我正在尝试获取特定帐户过去6个月创建的记录数。但是当我查看解释和分析时,我发现它首先索引扫描在该时间跨度内创建的所有记录,索引扫描该帐户的所有记录,然后进行位图堆扫描(这需要很长时间)。

https://explain.depesz.com/s/8Lje

我们有什么方法可以让它更快?

1 个答案:

答案 0 :(得分:0)

您可以创建可用于这两种情况的索引ON ca(accountid, createddate)

根据解释输出中的数字,可能是PostgreSQL仍然使用位图索引扫描,因为它认为速度更快。您可以尝试降低random_page_cost,看看是否选择了不同的计划并测试哪一个是最快的。