キーワード検索の方法

解決済みの質問

キーワード検索の方法

いつもお世話になっております。

以下のようなテーブル(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)

投稿日時 - 2009-03-03 19:02:17

連想キーワード:

QNo.4765427

すぐに回答ほしいです

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

基本的に、曖昧検索は、遅いです。
インデックスは役に立ちません。
こういう、検索にはRDBMSは向いていません。

ORで、結ばれているregexpを次のようにして、2つにまとめれば、2倍弱の速度向上はできるでしょうが。

body regexp 'キーワード1|キーワード2'

投稿日時 - 2009-03-05 10:44:34

ANo.2

2人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(1件中 1~1件目)

ANo.1

>約4000件のデータからキーワードの検索をするのに
>とても時間がかかってしまいます。

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

投稿日時 - 2009-03-04 00:46:47

補足

yambejp さん、ご回答ありがとうございます。

> ホントに4000件(?)ならSQLのデータとしてはすくない部類ですね
> テキストタイプということですが、1データはどのくらいの容量なのでしょう?

はい。
4000件で、1データの容量はちょっと定かではありませんが
全体のデータ量は約8MBぐらいです。

詳しくご説明しないと原因の特定が難しいのは承知なのですが
想像でも結構ですので、何か他に遅くなる原因が考えられましたら
教えていただきたいです。

よろしくお願いいたします。

投稿日時 - 2009-03-04 10:24:18

あわせてチェックしたい
  • date型のインデックス ...
  • date型でのbetweenについて教えてください。 ...
  • DATE型カラムのインデックスが効かない ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら