SQL合并和大表数据

时间:2018-01-25 19:07:12

标签: sql merge

我将运行MERGE SQL查询来查询源表中的一百多万条记录并插入到我的目标表中。我在Merge中执行SELECT的表正在生成中。该表将有一个应用程序,许多用户同时在表中访问SELECT,INSERT,UPDATE,DELETE。我不会使用MERGE语句修改源表数据,只修改目标表。我将启用SQL Snapshot Isolation,因此没有理由使用NOLOCK提示。有没有办法让批量运行查询,或者让MERGE语句更有效地扫描整个表?我还有另外两个合并语句,我将在初始INSERT之后运行,在目标表上执行INSERT,UPDATE,DELETE以完成任何更改。我是否需要采取任何预防措施以避免生产应用程序出现性能问题?我将使用存储过程,因为我将在多个表上运行这些查询,这些表将一遍又一遍地执行相同的功能。

我的样本初始合并:

MERGE dl178 as TARGET
USING dlsd178 as SOURCE
ON (TARGET.docid = source.docid AND TARGET.objectid = source.objectid AND target.pagenum = source.pagenum
    and target.subpagenum = source.subpagenum
    and target.pagever = source.pagever and target.pathid = source.pathid
    and target.annote = source.annote)
WHEN NOT MATCHED BY TARGET
THEN INSERT (docid, pagenum, subpagenum, pagever, objectid, pathid, annote, formatid, ftoffset, ftcount)
VALUES (
    source.docid, source.pagenum, source.subpagenum, source.pagever,
    source.objectid, source.pathid,source.annote ,source.formatid ,source.ftoffset, source.ftcount)
OUTPUT $action, Inserted.*;

1 个答案:

答案 0 :(得分:0)

您是否考虑过分区切换或更改数据捕获?听起来你正在尝试开始一个持续的ETL过程。