在具有50M和30K条目的表上进行内部联接

时间:2019-05-16 05:48:59

标签: postgresql query-performance postgresql-11

我有两个表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进行了索引扫描。

如何加快查询速度?

1 个答案:

答案 0 :(得分:0)

如果要获得准确的结果,则无法加快此查询的速度。

最有效的联接策略可能是哈希联接或合并联接,具体取决于您的work_mem设置。

您可能 可以通过仅索引扫描来提高速度;尝试在查询之前VACUUM两个表。

唯一的调整方法是确保两个表都缓存在RAM中。

有一些获取估算数量的方法,有关详细信息,请参见my blog