加速postgres查询(适用于2个表)

时间:2013-01-21 13:49:13

标签: performance postgresql join

我在postgresql中这样做:

select A.first, 
       count(B.second) as count, 
       array_agg(A.second) as second,
       array_agg(A.third) as third, 
       array_agg(B.kids) as kids 
from A join B on A.first=B.second 
group by A.first;

这是永远的(也因为桌子非常大)。将输出限制为10行并使用explain analyze查看告诉我有一个嵌套循环,这个循环非常庞大并占用大部分时间。

有没有什么方法可以编写这个查询(我将在CREATE TABLE AS中使用它来创建一个新表)来加速它,同时保留相同的输出,这就是我想要的?

谢谢!

1 个答案:

答案 0 :(得分:1)

确保将用作外键的列编入索引:

create index b_second on b(second);

如果没有这样的索引,a的每一行都会导致b的表扫描,这会使您的查询被抓取。