2017-03-09 5 views
-1
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です。

+1

一時テーブルにインデックスがありません。 – arkascha

+2

実行計画を見て、最初に1回ではなく、すべてのIDに対して '(select id from tbl2)'が実行されるのを確認することができます –

+0

クエリを実行します。 'tbl1からEXPLAIN select sum(a) id from tbl2) 'を実行し、結果を通知します。 – nos

答えて

0

この状況は、mysql < 5.5で発生します。長いクエリ時間を引き起こすバグがあるようです。解決策は、tmp2.idにインデックスを追加するか、mysqlの上位バージョンにアップグレードすることです。

0

(1,2,3)は、コードが実行されているときにすでにわかっているものですが、2番目の例は別のテーブルからのクエリです。しかし、600倍の遅さはさらに説明が必要です。あなたの状況の詳細な情報がなければ、我々は唯一の推測することができますが、次のように潜在的な問題は、次のとおりです。

  • 最初のテーブル
  • における第二のテーブルで多くのIDと多くのレコードは、内側のクエリがそれぞれに実行されますがあります外部クエリのレコード(可能性が高い)内部クエリの結果は、最初の例のセットのようになります場合は、

をフィルタリングするために使用される列のインデックスの

  • 不足、そしてあなたが分離する場合がありますあなたの質問を2つにする。別々にIDをロードしてから、2番目のクエリに結果を使用することができます。

  • 関連する問題