我需要每天更新一个非常大的(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'
Run Code Online (Sandbox Code Playgroud)
但是,我的服务器上需要将近40分钟(SQL Server为60GB的RAM).我希望获得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
Run Code Online (Sandbox Code Playgroud)我听说我可以使用ROWCOUNT执行批量MERGE - 但我不认为它对于300M行表来说足够快.
任何SQL查询提示都有帮助吗?