[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 メーリングリストの案内