[pgsql-jp: 35701] Re: たくさんの表を連結するときの速いSQL文を教えてください

"鈴木孝征(Suzuki Takamasa)" takamasa @ thaliana.myhome.cx
2005年 7月 7日 (木) 21:42:01 JST


鈴木孝征です。

> テーブルの数とパフォーマンスの関係についてはNo35625の
> スレッドを読んでください。
> この時の結論は
> 「同じ構造のテーブルをたくさん作るより、カラムを1つ
> 増やして大きな1つのテーブルにした方がよい」でした。

私の場合、カラムが徐々に増えていく(現在は1400ですが徐々に2000ぐらいまで
は増やしたいと考えています)のですが、そのつどalter tableでテーブル定義を
変更するほうがいいのでしょうか。

現在のしくみを考えるときに以下の3通りを試しました。しばしばメーリングリ
ストにでてくる「適切なインデックスの作成」というのがわかっていないので、
本来のパフォーマンスを出せていないと思いますが、作成を開始したときは3の
方法が一番速かったので、現在に至っています。。

1. 一つの大きな表を作成する。tとpを組み合わせるとユニークになるのでこれ
にインデックスを作成したが、データの追加に時間がかかった。
create table large (t as text, p as text, v as double)

また他の表(create other (p as text, s as text)、レコード数約4万)との結合
をすると時間がかかった。
select t,s,v from large, other where other.p = large.p and other.s in
(s1,s2,...s100) に時間がかかる

さらに数値の比較(t1-p1-vとt2-p1-vを割ったり、かけたり)をしたいので、この
形式の表ではSQLでは難しいと考えました。

2. たくさんのカラムを持つテーブルを作成する。データを追加するときにテー
ブルの定義を変更しなくてはいけない。あと1レコードあたりの情報量の制限っ
てありませんでしたか。
create table wide (p as text, t1 as double, ... t1400 as double);

3. たくさんのテーブルを作成する。データの検索のさいに結合をしないといけ
ない。
create table t1 (p as text, v as double), ...





pgsql-jp メーリングリストの案内