こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

mysqlでSELECTの速度を上げる方法

以下のようなSQLを発行すると、mysqlの処理時間が非常に多くかかるため、なんとか最適化を行いたいと考えています。
どのような方法があるのか教えていただけませんしょうか。

SELECT user_id,comment,comment_id,date,study_time,study,source
FROM data_temp t1
WHERE NOT EXISTS
(select comment_id from data t2 where t1.comment_id = t2.comment_id)

■補足
・dataとdata_tempのテーブル構造は全く同じです。
・SQLで実現したいことは、両テーブルのcomment_idをキーとして、dataに含まれないdata_tempの差分データを表示させたい。


なお、以下のインデックス作成は行いましたが、結果変わらずでした。
alter table data t1 ADD INDEX_t1 (user_id,comment,comment_id,date,study_time,study,source);
alter table data_temp t1 ADD INDEX_t1 (user_id,comment,comment_id,date,study_time,study,source);

よろしくお願いします。

投稿日時 - 2011-09-24 14:10:07

QNo.7031336

すぐに回答ほしいです

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

インデックス張るなら、comment_idにだけだと思うんですが。

あと、コメントIDが同じ物を除きたいんでしょうが、
素直にdataに含まれるもの以外で良いのでは?
where not exists (select comment_id from data)

あるいは外部結合して、data側がnullのレコードを抽出するか。

投稿日時 - 2011-09-24 14:43:56

お礼

早々のご回答ありがとうございます!
確認したところ、comment_idのみにインデックスを張ることで対処できました!

投稿日時 - 2011-09-24 20:50:51

このQ&Aは役に立ちましたか?

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

回答(2)

ANo.2

私も data テーブルに comment_id のみのインデックスを張ればよいと思います。

例)
ALTER TABLE data ADD INDEX (comment_id);


ちなみに頭に EXPLAIN を付けてSQLを実行すると最適化の参考になると思いますよ。
http://dev.mysql.com/doc/refman/5.1/ja/explain.html

投稿日時 - 2011-09-24 15:27:36

あなたにオススメの質問