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

Akira Atsumi atsumi @ webdb.co.jp
2005年 7月 7日 (木) 15:23:18 JST


あつみです。

 主題からは外れるのですが、特別な事情が無ければ複数のテーブルに
分けないのが一番シンプルで早い解決方法です。

create table tany (
 t int,
 p text,
 v double
);

 tには1〜1400,pに1〜21500,vに各値が入るイメージでしょうか。
 これであれば簡単なselect文だけで検索できます。

 やむを得ない事情があってテーブルを分けているのであれば、鈴木さんが
ご自分で書かれているように、

> SQL1:	select t1.p as p, t1.v as t1, t2.v as t2, ... , t10.v as t10
> 	into s1
> 	from t1, t2, ... , t10
> 	where (t2.p = t1.p and ... and t10.p = t1.p) and
> 	      (t1.p = p1 or t1.p = p2 or ... or t1.p = p100)
> 
> SQL2:	select t11.p as p, t11.v as t11, t12.v as t12, ... , t20.v as t20
> 	into s2
> 	from t11, t12, ... , t20
> 	where (t12.p = t11.p and ... and t20.p = t11.p) and
> 	      (t11.p = p1 or t11.p = p2 or ... or t11.p = p100)

 と分けるか、以下の様にunionでつなぐかだと思います。

select 1,v from t1 where p in ('p1',....)
union
select 2,v from t2 where p in ('p1',....)

 ただ、前者のSQL1,SQL2...とつなぐ方法も、わざわざs1,s2とテーブルを
分ける必要は無く、後者のような固定値を使って1つのテーブルに入れてし
まえばいいのではないでしょうか。
 尤もこの前者の方法は同時1アクセスが保証されていないと使えませんけど。。

---
Akira Atsumi
atsumi @ webdb.co.jp



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