我有一张表TBL1
,只有GUID。
我有另一个表TBL2
,其中主键是GUID,还有一些其他列。我想根据GUID是否在TBL2
中更新TBL1
表中的一列。
以下哪个查询更快和/或更可靠?
MERGE INTO [db].[dbo].[TBL1] AS target
USING [db].[dbo].[TBL2] as source
ON target.GUID = source.GUID
WHEN MATCHED THEN
UPDATE SET
StatusColumn = 0;
或
UPDATE [db].[dbo].[TBL1]
SET StatusColumn=0
WHERE GUID IN (SELECT GUID FROM [db].[dbo].[TBL2])
或者别的什么?
答案 0 :(得分:3)
这个问题的答案只能来自执行计划。根据您发布的计划(http://i.imgur.com/6vB2t.png),我们可以看到以下内容:
没有计划进行诊断就是猜测。看看计划和/或衡量标准。测量提供了答案,但计划提供了答案的理解。
答案 1 :(得分:1)
我认为最快的方法可能是使用连接的第三种选择:
UPDATE t1 SET StatusColumn=0
FROM db.dbo.TBL1 t1
INNER JOIN db.dbo.TBL2 t2 ON t1.guid = t2.guid