[pgsql-jp: 26734] Re: Likeの部分一致で検索

Hashimoto, Masaru hashimoto-m @ comtecc.net
2002年 7月 17日 (水) 17:26:10 JST


橋本です。

> 素朴に「すごいことになってますねぇ」だったりしますが...。

はい、すごいことになってます(^^;

> 部分一致で検索するということでは、総なめしますから
> そうそう速くなることはないとは思いますが、
> 中間一致でいいのであれば、
> 
> SELECT Count(*) As cnt  FROM tbl
> WHERE
>   keyword1 || '::' || keyword2 || '::' || keyword3 || '::' ||
>   keyword4 || '::' || keyword5 || '::' || keyword6 || '::' ||
>   keyword7 || '::' || keyword8 || '::' || keyword9 || '::' ||
>   keyword10|| '::' || keyword11|| '::' || keyword10|| '::' ||
>   keyword13|| '::' || keyword14|| '::' || keyword15|| '::' ||
>   keyword16|| '::' || keyword17|| '::' || keyword18
>     ~* 'windows|ウィンドウズ|ウインドウズ';
> 
ご提案ありがとうございます。
この方法で試してみました。
・・・が、はじめよりも遅くなってしまいました。
CountのSQLが17秒になってしまって・・・

ILIKEやLIKE部分をすべて正規表現に変えてやってみたりしたのですが、
どうも正規表現を使ったほうが遅いような感じです。
私の使い方が悪いのでしょうか?

tbl.keyword1 ILIKE '%windows%'
  ↓
tbl.keyword1 ~* 'windows'

tbl.keyword1 LIKE '%ウィンドウズ%'
  ↓
tbl.keyword1 ~ 'ウィンドウズ'


それと、項目にNullがあると文字列の結合ができないのですね。






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