[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 メーリングリストの案内