2011-12-19 48 views
0

我使用的是postgres 9.X. 我有兩張桌子Postgres group by update - 慢速查詢

Table A 
(
id integer 
); 

Table B 
(
id integer, 
Value integer 
); 

這兩張桌子都以id爲索引。

表A可以有重複的ID

Example: 
Table A 
ID 
1 
1 
1 
2 
1 

我打算插入事件ID的成表B的數目(此表具有的所有的ID是在表A中,但其值是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; 

隨着表A 3-10萬個條目,它是TA國王可怕的時間。有沒有一種方法可以優化這個查詢?

+0

對於第一個表索引,你有沒有 - btance索引?也許它會幫助你。 – DonCallisto 2011-12-19 22:35:36

+0

嗨,唐,我確實有兩個表中的「id」的B樹索引。 – KarthikRajagopal 2011-12-19 22:37:10

+0

這是我唯一的想法......我不知道如何改善運行時間......對不起 – DonCallisto 2011-12-19 22:40:29

回答

1

您是否需要tableB才能開始填充?從tableA一個INSERT...SELECT到一個空tableB(與tableB沒有索引)應該會更快:

insert into tableb (id, value) 
select id, count(*) 
from tablea 
group by id 

,然後添加你的索引tableB一旦數據是存在的。

+0

我通過減少從整數到字符列的大小來縮短更新時間。謝謝! – KarthikRajagopal 2011-12-21 17:37:09