Considérez la requête suivante:
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);
Les E / S statistiques donnent la sortie suivante:
Tableau 'ParameterType'. Nombre de balayages 0, lectures logiques 2, lectures physiques 0, lectures anticipées 0, lectures logiques 0, lob lectures physiques 0, lob lectures anticipées 0.
Table 'Area'. Nombre de balayages 0, lectures logiques 2, lectures physiques 0, lectures anticipées 0, lectures logiques 0, lob lectures physiques 0, lob lectures anticipées 0.
Tableau 'Paramètre'. Nombre de balayages 1, lectures logiques 4, lectures physiques 0, lectures anticipées 0, lectures logiques 0, lob lectures physiques 0, lob lectures anticipées 0.
Tableau 'Table de travail'. Nombre de balayages 1, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques 0, lob lectures physiques 0, lob lectures anticipées 0.
La table de travail apparaît dans l'onglet messages, ce qui me fait penser que tempdb est utilisé par MERGE
.
Je ne vois rien dans le plan d'exécution qui indiquerait un besoin de tempdb
Utilise MERGE
toujours tempdb?
Y a-t-il quelque chose dans BOL qui explique ce comportement?
Est-ce que l'utilisation INSERT
et UPDATE
serait plus rapide dans cette situation?
La gauche
Droite
Voici la structure du tableau
tempdb
. Cela semble étrange qu'il soit là pour une seule rangée. Je suppose que cela peut être là pour la protection d'Halloween.