
いつもお世話になっております。
以下のようなテーブル(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)
No.2ベストアンサー
- 回答日時:
基本的に、曖昧検索は、遅いです。
インデックスは役に立ちません。
こういう、検索にはRDBMSは向いていません。
ORで、結ばれているregexpを次のようにして、2つにまとめれば、2倍弱の速度向上はできるでしょうが。
body regexp 'キーワード1|キーワード2'
No.1
- 回答日時:
>約4000件のデータからキーワードの検索をするのに
>とても時間がかかってしまいます。
ホントに4000件(?)ならSQLのデータとしてはすくない部類ですね
テキストタイプということですが、1データはどのくらいの容量なのでしょう?
テキストだとインデックスもそれほど期待できないと思います。
本質的には文字を分かち書きして全文検索にするでしょうか・・・
もしくはキーワードを抽出して別テーブルで管理するとか。
この回答への補足
yambejp さん、ご回答ありがとうございます。
> ホントに4000件(?)ならSQLのデータとしてはすくない部類ですね
> テキストタイプということですが、1データはどのくらいの容量なのでしょう?
はい。
4000件で、1データの容量はちょっと定かではありませんが
全体のデータ量は約8MBぐらいです。
詳しくご説明しないと原因の特定が難しいのは承知なのですが
想像でも結構ですので、何か他に遅くなる原因が考えられましたら
教えていただきたいです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コクヨ タイトルブレーンでイ...
-
mysql IN句に1データだけ指定...
-
主キーにインデックスは貼らな...
-
【SQLServer】IS NULLのパフォ...
-
インデックスの再構築の意味っ...
-
MySQLのインデックスについて
-
「マスタ」と「テーブル」の違...
-
オラクルではできるのにSQLSERV...
-
accessで移動平均する方法
-
数百万件レコードのdelete
-
ACCESS2000のテーブル構造
-
SI Object Browserのテーブルス...
-
請求と入金のテーブルの作成の...
-
VBAの実行時エラー'2522'について
-
SQLで○○の値以外を持っているレ...
-
更新クエリでキー違反
-
Access VBA [リモートサーバー...
-
SELECT時の行ロックの必要性に...
-
AccessShareLock はどの程度気...
-
SQL SERFVER で外部キーのエラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
seoについておしえてください
-
mysql IN句に1データだけ指定...
-
インデックスの再構築の意味っ...
-
ホームページがGOOGLEにインデ...
-
【SQLServer】IS NULLのパフォ...
-
コクヨ タイトルブレーンでイ...
-
主キーにインデックスは貼らな...
-
ビューにインデックスを設定で...
-
年と月が別カラムの場合のSQL
-
サーバ負荷を抑える大量データ...
-
SQLiteで... like を早くする
-
[ BETWEEN ] vs [ >= AND <= ]
-
毎月10万円投資資金があるとし...
-
インデックスがすぐに壊れます…
-
『ラミネートインデックスシー...
-
コマンドプロンプト エラー
-
テキスト項目255ケタのメリット...
-
主キーとインデックスの違いに...
-
MySQLとSQLServerの性能の違い...
-
インデックス型かアクティブ型か?
おすすめ情報