私は、MySQL 5.0,5.1,5.5で以下の一見単純なクエリをテストしたところ、非常に遅いことがわかりました。MySQLサブクエリは本当に遅いです...回避策?
select * from entry where session_id in
(select session_id from entry where created_at > [some timestamp])
複数のエントリは同じセッションIDを持つことができますが、異なるcreated_atタイムスタンプを持つことができます。 クエリは、created_atが指定されたタイムスタンプより大きい同じsession_idから少なくとも1つのエントリを持つすべてのエントリを取得するためのものです。
私は、同様のクエリでMySQLサブクエリのパフォーマンスの問題を話し、MySQLはサブクエリを依存クエリとみなし、外部クエリに対してフルテーブルスキャンを実行していることが分かりました。推奨される回避策は、次のようなものでした:
select * from entry where session_id in
(select session_id from
(select session_id from entry where created_at > [some timestamp])
as temp)
しかし、このハックは私にとってはうまくいかず、さらに遅くなります。
このクエリの書き方についてのご意見はありますか?
あなたは男です。ありがとう! 私は2番目のクエリのようなものから始めましたが、別のものは除外しました。ワイルドカードを使用して結果セット全体に明確に適用できるかどうかはわかりませんでした。驚くばかり。 – n00b