[pgsql-jp: 38778] Re: 3種類の値を持つ6つの項目の検索方法

k_hata @ zeus.eonet.ne.jp k_hata @ zeus.eonet.ne.jp
2007年 9月 20日 (木) 16:59:40 JST


こんにちは

2の存在がネックということですね。


姑息な方法ですが、

CREATE TABLE img (
    imgno   serial PRIMARY KEY,
    datastr char(6),
    numof2  int,
    data1   int,
    data2   int,
    data3   int,
    data4   int,
    data5   int,
    data6   int,
 );

データ投入時にトリガ等で、datastrにdata1〜data6をつなげた文字列をセット
同時に、numof2 にdata1〜data6のなかの2の数をセット

プロシージャの中で、
 select * from img where datastr = '131313' or (numof2 > 0);
 この結果セットから、2を含む行を再チェック

もしこのクエリで (numof2 > 0)に該当する行が多すぎるようなら

CREATE TABLE img (
    imgno   serial PRIMARY KEY,
    datastr1 char(6),
    datastr2 char(6),
    numof2  int,
    data1   int,... );

こうしておき、datastr1には、2を1に変換した文字列を、datastr2には2を3
に変換した文字列をセット

 select * from img 
   where (datastr1 = '131313') or (datastr2 = '131313') or (numof2 > 1)



こんなアプローチはどうでしょうか。
インデックスは使えるようになるとは思いますが、速度のほうはどうでしょう...
他に手がなければ試してみる価値はあるかもしれません。






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