我正在使用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百万条记录,这需要花费大量时间。有没有办法可以优化这个查询?
答案 0 :(得分:1)
您是否需要tableB
最初填充?从INSERT...SELECT
tableA
到空tableB
(tableB
上没有索引)的insert into tableb (id, value)
select id, count(*)
from tablea
group by id
应该更快:
tableB
然后在数据存在后将索引添加到{{1}}。