MERGE与TRUNCATE和INSERT

时间:2012-11-15 06:51:28

标签: sql-server sql-server-2008

我最近升级到MSSQL 2008 R2,并且想知道“新”Merge函数是否比截断和插入更有效/更快,因为每个表有数百万行,因此更新表。如果有人能提供一些他们表现的数据,那就太好了,但任何解释都会有所帮助!

2 个答案:

答案 0 :(得分:1)

我不确定我是否正确地指出了TRUNCATEINSERT。如果没有,那么随时纠正我。

MERGE是指对现有行UPDATE执行操作的机制,或者,如果找不到现有行,则为INSERT

你建议使用TRUNCATEINSERT,这将删除MERGE的使用,因为一切都是INSERT。我不知道在这种情况下MERGE是否会更快或更快,因为我从未尝试过,但我会假设MERGE中决定是否使用的部分UPDATEINSERT会产生一些开销。

答案 1 :(得分:1)

我使用MERGE因为我需要跟踪数据更改(保持行的校验和),但是因为看起来你每次都需要“克隆”这些数据我没有看到任何特殊的理由在MERGE进行某种检查之后,使用MERGE(检查主键并在每个WHEN上放置其他条件); 使用TRUNCATE然后使用批量INSERT,您不应该在游戏中使用所有条件

顺便说一下,不要把这个作为100%的真实,我没有任何性能测试作为证明;我建议你尝试两种操作,看看哪一次需要更多的时间=)