Betrachten Sie die folgende Abfrage:
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);
Statistik-E / A liefert die folgende Ausgabe:
Tabelle 'ParameterType'. Scananzahl 0, logische Lesevorgänge 2, physische Lesevorgänge 0, Vorauslesevorgänge 0, logische Lobs-Lesevorgänge 0, physikalische Lobs-Lesevorgänge 0, Lobs-Vorauslesevorgänge 0.
Tabelle 'Bereich'. Scananzahl 0, logische Lesevorgänge 2, physische Lesevorgänge 0, Vorauslesevorgänge 0, logische Lobs-Lesevorgänge 0, physikalische Lobs-Lesevorgänge 0, Lobs-Vorauslesevorgänge 0.
Tabelle 'Parameter'. Scananzahl 1, logische Lesevorgänge 4, physische Lesevorgänge 0,
Vorlesevorgänge 0, logische Vorlesevorgänge 0, physische Vorlesevorgänge 0 , Vorlesevorgänge 0. Tabelle 'Arbeitstabelle'. Scanzählung 1, logische Lesevorgänge 0, physische Lesevorgänge 0, Vorlesevorgänge 0, logische Vorlesevorgänge 0, physische Vorlesevorgänge 0, Vorlesevorgänge 0.
Auf der Registerkarte mit den Nachrichten wird eine Arbeitstabelle angezeigt, die mich glauben lässt, dass Tempdb von verwendet wird MERGE
.
Ich sehe im Ausführungsplan nichts, was auf die Notwendigkeit von tempdb hindeutet
Hat MERGE
immer tempdb verwenden?
Gibt es irgendetwas in BOL, das dieses Verhalten erklärt?
Wäre die Verwendung von INSERT
& UPDATE
in dieser Situation schneller?
Links
Richtig
Hier ist die Tabellenstruktur
tempdb
. Scheint seltsam, dass es für eine einzelne Zeile da ist. Ich vermute, es könnte zum Halloween-Schutz da sein.