2012-02-09 5 views
0

IN条件で渡されるパラメータの数が多い場合、一時表の作成が最適であることを読んでいます。これは選択クエリ用です。これは更新クエリでも同様ですか? 3つのテーブル結合(内部結合)を使用し、IN条件で1000個のパラメーターを渡す更新クエリがあり、このクエリは200回以上繰り返し実行されます。このクエリを実行するための最良の方法はどれですか?IN MySQLでの更新操作の基準パフォーマンス

答えて

1

IN操作は通常遅いです。 1000のパラメータを任意のクエリに渡すことはひどく聞こえる。あなたがそれを避けることができれば、それをしてください。さて、私は本当に一時テーブルを持っています。あなたはテーブルのインデックス付けをすることさえできます。つまり、値を入力するのではなく、検索の最適化に役立つインデックスを使用することです。

一方、インデックスを追加すると、インデックスを追加するよりも処理が遅くなります。そこで経験的テストに行く。他のテーブルを使用する場合は、IN句を使用する必要はありません。なぜなら、通常はより良いパフォーマンスが得られるEXISTS節を使用できるからです。 I.E .:

select * from yourTable yt 
where exists (
    select * from yourTempTable ytt 
    where yt.id = ytt.id 
) 

あなたのクエリやデータはわかりませんが、どのようにすればよいかわかります。内部select *select aSingleFieldと同じくらい速く、データベースエンジンはそれを最適化するので注意してください。

これはすべて私の考えです。しかし、あなたの問題に最も適していることを100%確信させるためには、両方のテストを実行してタイミングを取るようなものはありません。

+0

ヘルプMostyに感謝します。私は間違いなくこれを試さなければならない。 –

+0

ようこそ@エブブ! –

関連する問題