アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

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

A 回答 (2件)

基本的に、曖昧検索は、遅いです。


インデックスは役に立ちません。
こういう、検索にはRDBMSは向いていません。

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

body regexp 'キーワード1|キーワード2'
    • good
    • 0

>約4000件のデータからキーワードの検索をするのに


>とても時間がかかってしまいます。

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

この回答への補足

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

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

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

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

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

補足日時:2009/03/04 10:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!