Considere la siguiente 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);
La E / S estadística proporciona el siguiente resultado:
Tabla 'ParameterType'. Cuenta de escaneo 0, lecturas lógicas 2, lecturas físicas 0, lecturas de lectura anticipada 0, lecturas lógicas lob 0, lecturas físicas lob 0, lecturas lob de lectura anticipada 0.
Tabla 'Área'. Cuenta de escaneo 0, lecturas lógicas 2, lecturas físicas 0, lecturas de lectura anticipada 0, lecturas lógicas lob 0, lecturas físicas lob 0, lecturas lob de lectura anticipada 0.
Tabla 'Parámetro'. Cuenta de escaneo 1, lecturas lógicas 4, lecturas físicas 0, lecturas de lectura anticipada 0, lecturas lógicas lob 0, lecturas físicas lob 0, lecturas lob de lectura anticipada 0.
Tabla 'Mesa de trabajo'. Recuento de escaneo 1, lecturas lógicas 0, lecturas físicas 0, lecturas de lectura anticipada 0, lecturas lógicas lob 0, lecturas físicas lob 0, lecturas de lectura lob 0.
La tabla de trabajo aparece en la pestaña de mensajes, lo que me hace pensar que tempdb está siendo utilizado por MERGE.
No veo nada en el plan de ejecución que indique una necesidad de tempdb
¿ MERGESiempre usa tempdb?
¿Hay algo en BOL que explique este comportamiento?
¿Usaría INSERT& UPDATEsería más rápido en esta situación?
Izquierda

Derecho

Aquí está la estructura de la tabla.

tempdb. Sin embargo, parece extraño que esté allí para una sola fila. Supongo que puede estar allí para la protección de Halloween.