我有两个表A和B。A包含5000万个条目,B仅包含3万个条目。我已经在用于连接表的列上创建了默认索引(B-tree)。联接字段的类型为character varying
。
我正在使用此查询查询数据库:
SELECT count(*)
from B INNER JOIN A
ON B.id = A.id;
上述查询的执行时间约为8秒。当我看到执行计划时,计划员对表a应用顺序扫描,扫描5000万个条目(这占用了大部分时间),对表B应用索引扫描。
如何加快查询速度?
最佳答案
如果需要精确的结果,则无法加快此查询。
最有效的连接策略可能是散列或合并连接,具体取决于work_mem
设置。
使用仅索引扫描可能可以提高速度;在查询之前尝试VACUUM
两个表。
唯一的优化方法是确保两个表都缓存在RAM中。
有多种方法可以获得估计的计数,有关详细信息,请参见my blog。
关于postgresql - 在具有50M和30K条目的表上进行内部联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56161587/