Considera la seguente query:
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);
L'I / O statistico fornisce il seguente output:
Tabella 'ParameterType'. Conteggio scansioni 0, letture logiche 2, letture fisiche 0, letture read-ahead 0, letture logiche lob 0, letture fisiche lob 0, letture read lob iniziali 0.
Tabella "Area". Conteggio scansioni 0, letture logiche 2, letture fisiche 0, letture read-ahead 0, letture logiche lob 0, letture fisiche lob 0, letture read lob iniziali 0.
Tabella "Parametro". Conteggio scansioni 1, letture logiche 4, letture fisiche 0, letture read-ahead 0, letture logiche lob 0, letture fisiche lob 0, letture read lob iniziali 0.
Tabella 'Worktable'. Conteggio scansioni 1, letture logiche 0, letture fisiche 0, letture avanti 0, letture logiche lob 0, letture fisiche lob 0, letture read lob 0.
Worktable appare nella scheda Messaggi che mi fa pensare che tempdb sia utilizzato da MERGE
.
Non vedo nulla nel piano di esecuzione che indichi la necessità di tempdb
Fa MERGE
sempre utilizzare tempdb?
C'è qualcosa in BOL che spiega questo comportamento?
Usando INSERT
e UPDATE
sarebbe più veloce in questa situazione?
Sinistra
Giusto
Ecco la struttura della tabella
tempdb
. Sembra strano che sia lì per una sola riga. Immagino che potrebbe essere lì per la protezione di Halloween.