[pgsql-jp: 28214] Re: レコード検索についての質問
Chie.M
gontakun @ check.ne.jp
2002年 12月 7日 (土) 15:31:53 JST
こんにちは。Chieと申します。
> 通常 where の後に検索条件のフィールドを書くと思いますが、
> 複数のフィールドを指定する場合、
> 最も最適な指定のしかたというものはあるのでしょうか?
snip・・・
> このように順番を入れかれる、もしくはタイプによって順番を決める、
> などのフィールド指定の順番によって、検索が早くならないか、と思っています。
そのSQLを実行するデータの状況によって変わってくるとはずですので
一概に、これが一番とはいえないのではないでしょうか?
EXPLAINを実行させて、実行計画の表示から、その状況に合わせた
SQLを作るのが一番だと思います。
ただ、基本的には次のような事が言えると思います。
たとえば、10,000人の生徒のデータがあったとします。
このうち、9,000人が卒業生です。
更にその中で8人の居住先が海外であるとします。
(変な例でスミマセン(^^ゞ)
このような場合の検索の順序としては2つあります。
1.まず卒業生を9000を絞ってから、居住先8人を抽出する。
2.居住先が海外である10人に絞ってから、卒業生である8人を抽出する
1の場合は検索するのに10,000件アクセスし、次に8人に絞り込むまでに
9,000件のアクセスが必要です。
2の場合は10,000件のアクセス後は、10件のアクセスで8人に
絞り込む事ができます。
1が19000のアクセスが必要であるのに対し、2は10010のアクセスで
済むわけですから、当然結果は早くなります。
よって、基本的には
抽出結果が少なくなると思われる方を先検索させる、
と考えています。
しかし、実際にはインデックスが着いていたり、データの状況の
変化等によって、必ずしもあてはまるとはいえないので、
EXPLAINを使って検証した方が良いと思います。
-----------------------------------
From : Chie.M
gontakun @ check.ne.jp
-----------------------------------
pgsql-jp メーリングリストの案内