我需要每天更新一个非常大(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'
但是,这在我的服务器上需要将近 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
我听说我可以使用 ROWCOUNT 执行批处理 MERGE - 但我认为它对于 300M 行表来说不够快。
任何有用的 SQL 查询提示?