【发布时间】:2015-02-03 16:18:46
【问题描述】:
我想只使用来自 table2 的新记录对 table1 进行增量更新。我正在寻找最快的方法。假设 id 是唯一整数,这三种方法中哪一种最快?如果您可以提出任何其他方法,请分享。
解决方案 1。
INSERT INTO table1
SELECT * FROM table2
WHERE NOT EXISTS
(SELECT 1 FROM table1
WHERE table2.id = table1.id)
解决方案 2。
INSERT INTO table1
SELECT table1.* FROM table1
LEFT OUTER JOIN table2
ON table1.id = table2.id
WHERE table2.id IS NULL
解决方案 3。
INSERT INTO table1
SELECT * FROM table2
WHERE table2.id > (SELECT MAX([table1.id]) FROM table1)
【问题讨论】:
-
1)
ORDER BY子句要么在这里什么都不做,要么产生错误。 2) 解决方案 3 对MAX的使用对我来说看起来不正确,无论如何在逻辑上与解决方案 1 和 2 有很大不同,因此无法比较。 3) 解决方案 1 和 2 在逻辑上是相同的,并且很可能会产生相同的执行计划和几乎相同的性能。
标签: sql join insert sql-server-2012