[pgsql-jp: 35711] Re: たくさんの表を連結するときの速いSQL文を教えてください
Akira Atsumi
atsumi @ webdb.co.jp
2005年 7月 8日 (金) 11:40:44 JST
あつみです。
ちょっと古い所にレスですが、
> create table large (t as text, p as text, v as double)
これは v は不要ですよね。ついでに言うとtはsmallint,vはintで十分です。
そしてこのindexはprimary indexなので、
create table large (
t smallint not null,
p text not null,
v int,
constraint large_pk primary key ( t,p )
);
という感じでしょうか。
このデータ構造であれば、データ量が3000万件程度できちんとindexが
使われていれば、検索にそんな時間がかかるということは無いはずです。
insertも一度に大量のデータを流し込まなければ、そんな遅くないはず
です。。
「t2.v / t1.v > 2」等の条件をかけたい場合、私であれば一旦取得
してしまってからPHP側で弾きます。条件は200個程度とのことでしたの
で、結果行も200行ぐらいになるでしょうから、PHP側で弾いても問題無さ
そうです。
逆にこの条件を満たすためにテーブルを分割するほうがデメリットが
大きいように思います。
テンポラリテーブルを大量に作成・削除するのもvacuumに負荷がかかる
のでお奨めできません。
---
Akira Atsumi
atsumi @ webdb.co.jp
pgsql-jp メーリングリストの案内