通过更新Postgres组 - 慢查询

时间:2011-12-19 22:33:07

标签: postgresql group-by aggregation

我正在使用postgres 9.X. 我有两张桌子

Table A
(
id integer
);

Table B
(
id integer,
Value integer
);

两个表都在id上编制索引。

表A可以有重复的ID

Example:
Table A
ID
1
1
1
2
1

我打算在表B中插入ID的出现次数(此表具有表A中的所有ID,但最初值为0)

Table B
ID       Value
1         4
2         1
3         0
4         0

这是我的SQL语句

update tableB set value = value + sq.total
from
( select id, count(*) as total from TableA group by id ) as sq
where sq.id = tableB.id;

TableA中有3到10百万条记录,这需要花费大量时间。有没有办法可以优化这个查询?

1 个答案:

答案 0 :(得分:1)

您是否需要tableB最初填充?从INSERT...SELECT tableA到空tableBtableB上没有索引)的insert into tableb (id, value) select id, count(*) from tablea group by id 应该更快:

tableB

然后在数据存在后将索引添加到{{1}}。