2011-02-10 18 views
0

私は30M +の行を持つテーブルを持っており、各インデックスの更新は高価です。 1つのインサートに5000以上の行を更新または追加する必要があることがあります。 すべての行が新しい場合もあれば、新しい行もあります。1つの重複アップデートxxに挿入 - テーブルのINDEXesも更新しますか?

更新を使用することはできません。既にテーブルにあるものがわからないので、INSERT ..を使用します.1つの列に対して重複キー更新を使用します。

これは、5秒を超える時間がかかることがあります。

良い方法がありますか?多分私は自分自身を十分に説明していないかもしれません:)

答えて

0

あなたは5000以上の別々の挿入ステートメントを発行していますか?その場合は、挿入を実行しながらテーブルをロックします。それはずっと速く進むでしょう。

+0

mmm。私はこれらの5000行を、区切られた値を持つ単一の挿入物に入れました。私はテーブルをロックして、効果を参照しようとすることができます – sbargay

+0

それはすでに1つの挿入ステートメントの場合は、テーブルをロックする違いを起こす可能性はほとんどありません。 'INSERT'の代わりに' REPLACE'を使うとどうなりますか? – awm

+0

ロックはあまり変わっていませんでしたが、置き換えにはかなりの問題があります。インデックスも再構築されませんか? – sbargay

0

挿入を実行するためにBEGIN TRANSACTIONとCOMMITが追加され、x4からx10のパフォーマンスが向上しました。

関連する問題