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

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


橋本です。
森本様、ご返信ありがとうございます。

> このソースは実際のものですか?配列とかで処理してるのでしょうか?
> PHPなどを使用して配列で検索ってのもできると思うのですが。。。
> ついでにヒット件数とデータ取得も1つのセレクトだけで済むような気がするのは私
> だけ?
> 
> ちなみに、PHPでの記述例
> 
> $sql = "select id from tbl
>  where ((keyword1 ILIKE '%".$searchword[0]."%')
>  or (keyword2 ILIKE '%".$searchword[0]."%')
>  or (keyword3 ILIKE '%".$searchword[0]."%') or ・・・))";
> for ($i=1;$1 < sizeof($searchword);$i++){
> $sql.= "or ((keyword1 ILIKE '%".$searchword[$i]."%')
>  or (keyword2 ILIKE '%".$searchword[$i]."%')
>  or (keyword3 ILIKE '%".$searchword[$i]."%') or ・・・))";
> }
> $result = pg_exec($dbHandle, $sql); //SQL文実行
> 
> $resultNumRows = pg_numrows($result);//検索件数取得
> 
> こんな感じだと思うのですが。。。解決にならないかもしれませんが、気になったん
>> 

現在はJSP+Servletを使用しております。
項目名やテーブルはテスト用に変更しておりますが、
SQL文自体は実際に使用しているものと同じです。

私もはじめは森本様と同じ方法を使って、
・LIMITを使用せずにヒットした全件を取得
・Javaでヒット件数を取得
・必要なレコードのみ一覧に表示する。
という風にしておりました。

ヒット件数が1000件程度でしたら問題なかったのですが、
10,000件とかになってしまうと遅くなってしまいました。
ネットワークトラフィックとかも関係してくるかなと思ってます。

それで、必要なレコードだけ取得する方法に変更しました。
変更したおかげでCountを取らないといけなくなったんですが、
二つのSQL実行をあわせたとしても、件数が多い場合は少し早くなりました。
(件数が少ない場合はあまり変わりません)

やはりこのようにアプリケーションで制御する方法を
考えるのが一番の近道になるかもしれないんですが・・・
頭が固いのでなかなかアイデアが浮かばないんですよね。






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