Рассмотрим следующий запрос:
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);
Статистика ввода-вывода дает следующий вывод:
Таблица «ParameterType». Сканирование счетчик 0, логическое чтение 2, физическое чтение 0, чтение с опережением 0, чтение логического объекта 0, чтение с физического объекта 0, чтение с опережением 0.
Таблица «Область». Сканирование 0, логическое чтение 2, физическое чтение 0, чтение с опережением 0, чтение логического объекта 0, чтение с физического объекта 0, чтение с опережением 0.
Таблица «Параметр». Сканирование 1, логическое чтение 4, физическое чтение 0, чтение с опережением 0, чтение логического объекта 0, чтение с физического объекта 0, чтение с
предварительного чтения 0. Таблица «Рабочий стол». Сканирование 1, логическое чтение 0, физическое чтение 0, чтение с опережением 0, логическое чтение с 0, физическое чтение с 0, чтение с опережением 0.
Рабочий стол появляется на вкладке сообщений, что заставляет меня думать, что tempdb используется MERGE.
В плане выполнения я не вижу ничего, что указывало бы на необходимость в базе данных tempdb
MERGEВсегда ли использовать tempdb?
Есть ли что-то в BOL, что объясняет это поведение?
Будет ли использование INSERTи UPDATEбудет быстрее в этой ситуации?
Осталось

Правильно

Вот структура таблицы

tempdb. Кажется странным, что это там для единственной строки все же. Я предполагаю, что это может быть там для защиты Хэллоуина.