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