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

Nozomi Ytow nozomi @ biol.tsukuba.ac.jp
2007年 9月 21日 (金) 16:28:43 JST


>  data1〜data6は、それぞれ別の意味の値と比較する必要があります。

それなら

SELECT imgno,data FROM img WHERE (data1 & val1) <> 0 AND
       (data2 & val2) <> 0 AND (data3 & val3) <> 0 AND
       (data4 & val3) <> 0 AND (data5 & val5) <> 0 AND
       (data6 & val6) <> 0;

但し val1-val6 は比較すべき値。
よく考えたら valX は以下のエンコード必要でした。
1 -> 1, 2 -> 2, 3 -> 4
要するにバイナリ表示の桁なので、シフト演算子で十分です。
各 dataX が 3 ビットしかつかわないので、data1-6 を
一つの INTEGER で持てます。だから本当はこんなに & は
いりません。こんな↓でしょう。速度的には疑問。

SELECT imgno,data FROM img WHERE (data0 & val0) <> 0;

インデクス張りたいなら 1, 2, 3 のそれぞれで検出されるべき
タプルかどうかエンコードするのが速度的な答えではないかと
思います。

結局のところ元のデータが範囲がエンコードした離散値で、
順序関係をどこに持たせるかというのがキモなのかしらん。
--
のぞみ



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