select sum(a) from tbl1 where id in (1,2,3) (0.1 seconds)
とこれらの2つのmysqlクエリのパフォーマンスの違いは何ですか?
select sum(a) from tbl1 where id in (select id from tbl2) (60 seconds)
select id from tbl2
0.001秒1,2,3戻ります。
tbl1のエントリ数は約2.2Mです。
select sum(a) from tbl1 where id in (1,2,3) (0.1 seconds)
とこれらの2つのmysqlクエリのパフォーマンスの違いは何ですか?
select sum(a) from tbl1 where id in (select id from tbl2) (60 seconds)
select id from tbl2
0.001秒1,2,3戻ります。
tbl1のエントリ数は約2.2Mです。
この状況は、mysql < 5.5で発生します。長いクエリ時間を引き起こすバグがあるようです。解決策は、tmp2.idにインデックスを追加するか、mysqlの上位バージョンにアップグレードすることです。
(1,2,3)
は、コードが実行されているときにすでにわかっているものですが、2番目の例は別のテーブルからのクエリです。しかし、600倍の遅さはさらに説明が必要です。あなたの状況の詳細な情報がなければ、我々は唯一の推測することができますが、次のように潜在的な問題は、次のとおりです。
をフィルタリングするために使用される列のインデックスの
一時テーブルにインデックスがありません。 – arkascha
実行計画を見て、最初に1回ではなく、すべてのIDに対して '(select id from tbl2)'が実行されるのを確認することができます –
クエリを実行します。 'tbl1からEXPLAIN select sum(a) id from tbl2) 'を実行し、結果を通知します。 – nos