解決済みの質問
いつもお世話になっております。
以下のようなテーブル(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
2人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(1件中 1~1件目)
>約4000件のデータからキーワードの検索をするのに
>とても時間がかかってしまいます。
ホントに4000件(?)ならSQLのデータとしてはすくない部類ですね
テキストタイプということですが、1データはどのくらいの容量なのでしょう?
テキストだとインデックスもそれほど期待できないと思います。
本質的には文字を分かち書きして全文検索にするでしょうか・・・
もしくはキーワードを抽出して別テーブルで管理するとか。
投稿日時 - 2009-03-04 00:46:47
補足
yambejp さん、ご回答ありがとうございます。
> ホントに4000件(?)ならSQLのデータとしてはすくない部類ですね
> テキストタイプということですが、1データはどのくらいの容量なのでしょう?
はい。
4000件で、1データの容量はちょっと定かではありませんが
全体のデータ量は約8MBぐらいです。
詳しくご説明しないと原因の特定が難しいのは承知なのですが
想像でも結構ですので、何か他に遅くなる原因が考えられましたら
教えていただきたいです。
よろしくお願いいたします。
投稿日時 - 2009-03-04 10:24:18