Iは、次のUPDATEシナリオを持っている:SETに高価な集約サブクエリが含まれているSQL UPDATE文のパフォーマンスを改善するにはどうすればよいですか?
UPDATE destTable d
SET d.test_count = (SELECT COUNT(employee_id)
FROM sourceTable s
WHERE d.matchCode1 = s.matchCode1 AND
d.matchCode2 = s.matchCode2 AND
d.matchCode3 = s.matchCode3
GROUP BY matchCode1, matchCode2, matchCode3, employee_id)
Iは各反復の一致コードを変更するループでこれを実行しなければなりません。
2つの大きなテーブル(それぞれ〜500kレコード)の間で、このクエリは実行に許容できないほど長い時間がかかります。一度だけ実行すれば、あまり気にしません。それは約20回実行されていることを考えると、私のニーズには余りにも時間がかかる。
2つの完全なテーブルスキャンが必要です(destTable用とサブクエリ用)。
質問:あなたはこれをスピードアップすることをお勧めしますどのような技術
?
SQLオプティマイザは、サブクエリのwhere節を満たすためにdestTableで更新している行ごとにサブクエリを実行しますか、これを一度に行うためのスーパーインテリジェンスはありますか?
「各繰り返しで一致コードを変更する」とはどういう意味ですか? –
申し訳ありませんが、あいまいです。私は、ロールに基づいて反復するループを持っています。私の例の「マッチコード」は、さまざまな役割の割り当てを表しています。各ループの反復はロールの割り当てを変更して、各パスで同じテーブルの異なるセグメントを更新します(ここでWHOの呪文を忘れてしまいました)。 –