Considere a seguinte consulta:
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);
E / S de estatísticas fornece a seguinte saída:
Tabela 'ParameterType'. Contagem de varreduras 0, leituras lógicas 2, leituras físicas 0, leituras de leitura antecipada 0, leituras lógicas de lob 0, leituras físicas de lob 0, leituras físicas de lob 0, leituras de leitura antecipada de 0.
Tabela 'Área'. Contagem de varreduras 0, leituras lógicas 2, leituras físicas 0, leituras de leitura antecipada 0, leituras lógicas de lob 0, leituras físicas de lob 0, leituras físicas de lob 0, leituras de leitura antecipada de 0.
Tabela 'Parâmetro'. Contagem de varredura 1, leituras lógicas 4, leituras físicas 0, leituras de leitura antecipada 0, leituras lógicas de lob 0, leituras físicas de lob 0, leituras físicas de lob 0, leituras de leitura antecipada de lob 0.
Tabela 'Worktable'. Contagem de varreduras 1, leituras lógicas 0, leituras físicas 0, leituras de leitura antecipada 0, leituras lógicas de lob 0, leituras físicas de lob 0, leituras físicas de lob 0, leituras de leitura antecipada de lob 0.
A tabela de trabalho aparece na guia Mensagens, o que me faz pensar que o tempdb está sendo usado pelo MERGE .
Não estou vendo nada no plano de execução que indique a necessidade de tempdb
Será MERGEsempre usar tempdb?
Existe algo no BOL que explique esse comportamento?
Usar INSERTe UPDATEser mais rápido nessa situação?
Esquerda

Certo

Aqui está a estrutura da tabela

tempdb. Parece estranho que ele esteja lá por uma única linha. Eu acho que pode estar lá para a proteção do Halloween.