• ベストアンサー

キーワード検索の方法

いつもお世話になっております。 以下のようなテーブル(news)があります。 cid(int)|nid(int)|news_date(date)|body(text) キーは cid と nid です。 約4000件のデータからキーワードの検索をするのに とても時間がかかってしまいます。 SQL文は以下のようにしております。 select * from news where news_date between '2008-03-03' and '2009-03-03' and nid='1' and (body regexp 'キーワード1' or body regexp 'キーワード2') order by news_date DESC どうしたら速度が早くなるのでしょうか? インデックスをはったりすればいいのでしょうか? よろしくご教授お願いいたします。 <環境> MySQL:4.1.22(utf-8)

質問者が選んだベストアンサー

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

基本的に、曖昧検索は、遅いです。 インデックスは役に立ちません。 こういう、検索にはRDBMSは向いていません。 ORで、結ばれているregexpを次のようにして、2つにまとめれば、2倍弱の速度向上はできるでしょうが。 body regexp 'キーワード1|キーワード2'

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>約4000件のデータからキーワードの検索をするのに >とても時間がかかってしまいます。 ホントに4000件(?)ならSQLのデータとしてはすくない部類ですね テキストタイプということですが、1データはどのくらいの容量なのでしょう? テキストだとインデックスもそれほど期待できないと思います。 本質的には文字を分かち書きして全文検索にするでしょうか・・・ もしくはキーワードを抽出して別テーブルで管理するとか。

wonder_dct
質問者

補足

yambejp さん、ご回答ありがとうございます。 > ホントに4000件(?)ならSQLのデータとしてはすくない部類ですね > テキストタイプということですが、1データはどのくらいの容量なのでしょう? はい。 4000件で、1データの容量はちょっと定かではありませんが 全体のデータ量は約8MBぐらいです。 詳しくご説明しないと原因の特定が難しいのは承知なのですが 想像でも結構ですので、何か他に遅くなる原因が考えられましたら 教えていただきたいです。 よろしくお願いいたします。