小编Ser*_*lov的帖子

SQL Server中非常大的表的更新或合并

我需要每天更新一个非常大的(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%的性能提升 - 我可以尝试其他选项吗?

  1. 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)
  2. 我听说我可以使用ROWCOUNT执行批量MERGE - 但我不认为它对于300M行表来说足够快.

  3. 任何SQL查询提示都有帮助吗?

sql-server-2008 sql-update sql-merge

9
推荐指数
2
解决办法
3万
查看次数

标签 统计

sql-merge ×1

sql-server-2008 ×1

sql-update ×1