非常に大規模 (300M レコード) で広範な を毎日更新する必要がありますTABLE1
。更新のソース データはUTABLE
、行の 10% ~ 25% であるTABLE1
が狭い別のテーブルにあります。両方のテーブルrecord_id
に主キーがあります。
現在、TABLE1
次のアプローチを使用して 再作成しています。
<!-- language: sql -->
1) SELECT (required columns) INTO TMP_TABLE1
FROM TABLE1 T join UTABLE U on T.record_id=U.record_id
2) DROP TABLE TABLE1
3) sp_rename 'TMP_TABLE1', 'TABLE1'
ただし、これには私のサーバー (SQL Server の場合は 60GB の RAM) では 40 分近くかかります。パフォーマンスを 50% 向上させたいと考えています。他にどのようなオプションを試すことができますか?
MERGE
そしてUPDATE
-以下のコードのようなものは、非常に小さなUTABLE
テーブルでのみ高速に動作します-フルサイズでは、すべてがハングします:<!-- language: SQL --> MERGE TABLE1 as target USING UTABLE as source ON target.record_id = source.record_id WHEN MATCHED THEN UPDATE SET Target.columns=source.columns
ROWCOUNT を使用してバッチ MERGE を実行できると聞きましたが、3 億行のテーブルに対して十分な速度が得られるとは思いません。
役立つ SQL クエリのヒントはありますか?