Performance 加快postgres查询(可在2个表上运行)

Performance 加快postgres查询(可在2个表上运行),performance,postgresql,join,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; 而且要花很长时间(也因为

在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查看,这告诉我有一个嵌套循环,它非常庞大,占用了大部分时间

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


谢谢

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

create index b_second on b(second);

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

确保作为外键使用的列被索引:

create index b_second on b(second);

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

请发布执行计划(使用解释分析)以及在两个表上定义的所有索引的定义。关于性能问题的更多信息如下:原始表中没有索引。创建其中一些,我需要的,足以将查询速度提高几个数量级。我想我今天学到的关键概念是:“让你的索引工作起来”。)请发布执行计划(使用explain ANALYSE)和两个表上定义的所有索引的定义。关于性能问题的更多信息如下:原始表中没有索引。创建其中一些,我需要的,足以将查询速度提高几个数量级。我想我今天学到的关键概念是:“让你的索引工作起来”。)好多了,谢谢!(我不知道为什么我认为我必须在查询上而不是在桌子上工作)好多了,谢谢!(我不知道为什么我认为我必须在查询上而不是在桌子上工作)