我有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
我们有什么方法可以让它更快?
答案 0 :(得分:0)
您可以创建可用于这两种情况的索引ON ca(accountid, createddate)
。
根据解释输出中的数字,可能是PostgreSQL仍然使用位图索引扫描,因为它认为速度更快。您可以尝试降低random_page_cost
,看看是否选择了不同的计划并测试哪一个是最快的。