[pgsql-jp: 26735] Re: Likeの部分一致で検索
Hashimoto, Masaru
hashimoto-m @ comtecc.net
2002年 7月 17日 (水) 17:50:49 JST
橋本です。
> > ・キーワードは[windows][ウィンドウズ][ウインドウズ]です。
> > ・すべてORで検索しています。
>
> 現状、複数のキーワードを指定すると、OR で追加されていくようですが
> 検索する方の立場としたら、AND で絞り込みしてくれたほうがうれしい
> 気がします。
>
> その方がパフォーマンスも良くなるような気がしますし。
>
また説明不足です。申し訳ありません。
実は通常はANDで絞込みを行っています。
ですが、特定のキーワードの場合(今回はwindows)を入力されると
[windows][ウィンドウズ][ウインドウズ]のどれかが一致しても
結果に表示するような仕様となっています。
なのでその場合はORで検索を行っています。
ちなみにANDでやってみると、少しだけ早くなりました。
(4.457秒が4.447秒に・・・)
> #ところで キーワードに 'win' と 'windows' が指定されたとき、
>
> 〜 WHERE Field ILIKE '%win%' AND Field ILIKE '%windows%'
> より
> 〜 WHERE Field ILIKE '%windows%' AND Field ILIKE '%win%'
>
> の方が早いのでしょうか?
> キーワードの順番って検索スピードに影響するのかちょっと知りたいです。
>
私が出したメールに記述したCountのSQL文で試してみました。
○win → windows の順番の場合
2.824秒
○windows → win の順番の場合
2.884秒
若干ですが違いがありました。
また、ウィンドウズとwindowsで試してみました。
○ウィンドウズ → windows の順番の場合
7.030秒
○windows → ウィンドウズ の順番の場合
3.825秒
こちらは倍近くの差が出ました!
ちょっとビックリです。
以前、WHERE句ではじめの条件がヒットしたら後の条件は
見にいかないというような記述を見た覚えがあるのですが、
それのためにこの差が出たのでしょうか?
たしかに、以下のようにヒット件数に差があります。
○winだけで検索した場合
12,193件
○windowsだけで検索した場合
11,884件
○ウィンドウズだけで検索した場合
92件
[windows]が先に来たWHEREだと、[windows]でヒットするから、
あとの[ウィンドウズ]の条件は行っていないとうことでしょうか?
それとも単純に、アルファベットの条件が先に来たほうが
LIKEは早くなるとか?
(日本語のLIKEは遅いような気がするので)
でもどれがヒットするかなんて検索してみないとわかりませんから
順番を入れ替えるの難しいですよね・・・
pgsql-jp メーリングリストの案内