1

10000000 を超えるデータを処理するアプリケーションがあります。

MainTable に 10000000 を超えるデータがあります

メインテーブルからサブテーブルにデータを挿入しようとしています

INSERT INTO SubTable(Value1,Value2)
SELECT Value1,Value2 FROM MainTable
GROUP BY Value1_ID;

サブテーブルで特定の処理を実行した後、新しい値をメイン テーブルに更新します。

UPDATE MainTable inf,SubTable in
SET inf.Value1=in.Value1, inf.Value2=in.Value2
WHERE inf.Value1_ID= in.Value1_ID;

このクエリを実行している間、サーバー全体が非常に遅くなり、他のトランザクション全体が停止します。ここでは JDBC Driver Manager 接続を使用しています。これを回避する方法は?この問題を解決するには?

4

1 に答える 1

1

テーブル全体を1回の更新で更新するのではなく、たまにしか実行する必要がない場合は、数秒/分程度ごとに行のバッチごとに更新する小さなスクリプトを設定できます。他のプロセスでは、2つの更新の間にクエリが自由に実行されます。
たとえば、毎分100,000行のバッチを更新することにより、テーブルに適切なインデックスがある場合、1〜2時間かかりますが、パフォーマンスへの影響ははるかに少なくなります。

他の解決策は、サーバー上のアクティビティが最も低いときに(おそらく週末に?)更新を行うことです。そうすれば、他のプロセスにそれほど影響を与えることはありません。

于 2012-10-08T09:05:40.263 に答える