実際、そのようなクエリの一般的な推奨事項を見つけました。SQL Merge または Update を使用するアイデアは非常に賢いものですが、多くのレコードを更新する必要がある場合 (つまり、75M) は失敗します。 ) 大きくて幅の広いテーブル (例:240M) )。
以下のクエリのクエリ プランを見ると、TABLE SCAN
と言えます。 TABLE1 と最後の MERGE
の 時間の 90% を占めています。
MERGE TABLE1 as Target
USING UTABLE as source
ON Target.record_id = source.record_id
WHEN MATCHED AND (condition) THEN
UPDATE SET Target.columns=source.columns
したがって、MERGE を使用するには、次のことを行う必要があります:
<オール>UTABLE
にすることで実現できます より小さいか、追加の condition
を指定する マージする部分を狭めます。TABLE1
の作成 実際のクエリ時間が 11 時間から 40 分に短縮されました。
マークが述べたように、 UPDATE
を使用できます 構文と使用 WHERE
マージされる部分を狭める節 - これは同じ結果をもたらします。また、TABLE1
のインデックス作成も避けてください これにより、MERGE
中にインデックスを再構築する追加の作業が発生するためです。