我有两个表A和B。A包含5000万个条目,而B仅包含3万个条目。我已经在用于连接表的列上创建了默认索引(B树)。连接字段的类型为character varying
。
我正在使用以下查询查询数据库:
SELECT count(*)
from B INNER JOIN A
ON B.id = A.id;
以上查询的执行时间约为8秒。当我看到执行计划时,计划者对表A进行了顺序扫描,扫描了所有5000万个条目(这大部分时间),并对表B进行了索引扫描。
如何加快查询速度?
答案 0 :(得分:0)
如果要获得准确的结果,则无法加快此查询的速度。
最有效的联接策略可能是哈希联接或合并联接,具体取决于您的work_mem
设置。
您可能 可以通过仅索引扫描来提高速度;尝试在查询之前VACUUM
两个表。
唯一的调整方法是确保两个表都缓存在RAM中。
有一些获取估算数量的方法,有关详细信息,请参见my blog。