考虑以下查询:
MERGE [Parameter] with (rowlock) AS target
USING (SELECT @AreaId, @ParameterTypeId, @Value)
AS source (AreaId, ParameterTypeId, Value)
ON (target.AreaId = source.AreaId AND
target.ParameterTypeId = source.ParameterTypeId)
WHEN MATCHED THEN
UPDATE SET target.Value = source.Value, @UpdatedId = target.Id
WHEN NOT MATCHED THEN
INSERT ([AreaId], [ParameterTypeId], [Value])
VALUES (source.AreaId, source.ParameterTypeId, source.Value);
统计信息I / O提供以下输出:
表“ ParameterType”。扫描计数0,逻辑读取2,物理读取0,预读读取0,lob逻辑读取0,lob物理读取0,lob预读读取0。
表'Area'。扫描计数0,逻辑读2,物理读0,预读0,lob逻辑读0,lob物理读0,lob预读0。
表'Parameter'。扫描计数1,逻辑读4,物理读0,预读0,lob逻辑读0,lob物理读0,lob预读0。
表'Worktable'。扫描计数1,逻辑读为0,物理读为0,预读为0,lob逻辑读为0,lob物理读为0,lob预读为0。
工作表出现在消息选项卡中,这使我认为tempdb正在被MERGE
。
我没有在执行计划中看到任何表明需要tempdb的信息
是否MERGE
总是使用tempdb?
BOL中有什么可以解释此行为?
在这种情况下会使用INSERT
&UPDATE
更快吗?
剩下
对
这是表格结构
tempdb
。虽然只有一行,这似乎很奇怪。我想可能有万圣节保护。