2011-12-19 32 views
0

私はpostgres 9.Xを使用しています。 私は2つのテーブルを持っています更新によるPostgresグループ - 低速クエリ

Table A 
(
id integer 
); 

Table B 
(
id integer, 
Value integer 
); 

どちらのテーブルもidでインデックスされています。

表Aは、私は、テーブルBにIDの出現回数を挿入しようと重複するIDの

Example: 
Table A 
ID 
1 
1 
1 
2 
1 

を有することができる(この表は、表AにあるすべてのIDを持っていますが、値は初期値は0である)

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

は私のSQL文のTableAの中3-10百万のエントリを持つ

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; 

あり、それがtaです王はひどい時間を過ごす。このクエリを最適化する方法はありますか?

+0

istance - 最初のテーブルインデックスのb-treeインデックスですか?多分あなたを助けるでしょう。 – DonCallisto

+0

こんにちは、私は両方のテーブルの "id"にBツリーインデックスを持っています。 – KarthikRajagopal

+0

それは私の唯一のアイデアだった...私はどのように実行時間を改善することができないのかわからない...申し訳ありません – DonCallisto

答えて

1

tableBに最初に入力する必要がありますか?

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

、その後データがあるいったんtableBにあなたのインデックスを追加:空tableBtableBには索引を持つ)へtableAからINSERT...SELECTが速くなければなりません。

+0

にアップロードしました。列のサイズを整数からcharに減らすことで、更新時間を短縮しました。ありがとう! – KarthikRajagopal

関連する問題