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á MERGE
sempre usar tempdb?
Existe algo no BOL que explique esse comportamento?
Usar INSERT
e UPDATE
ser 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.