SQL MERGE替代INSERT - 优化

时间:2018-04-28 13:50:02

标签: sql-server

我将大量数据插入到SQL表中,并希望获得生成的ID。我需要它尽可能快地工作。

MERGE [TargetTable] AS dst USING [SourceTable] AS src 
ON 0 = 1 
WHEN NOT MATCHED BY TARGET 
THEN INSERT (...columns...) 
VALUES (...values)

我每次添加10K行数据 一旦目标表增长到100M +记录,此操作现在需要2到300+秒 根据实际执行计划,最重要的操作是:

  • 索引插入 - 40%
  • 聚集索引合并 - 20%
  • 排序 - 26%

问题:

  1. 插入数据块时是否有更快的方式返回ID?
  2. 即使我指定" 0 = 1" MERGE仍会比较源数据和目标数据。这是不是真的?如果是这样,那么有没有办法阻止数据库引擎进行比较数据并始终插入?
  3. 根据上述统计数据,我该怎样做才能减少这些延迟?

0 个答案:

没有答案