Розглянемо наступний запит:
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);
Статистика вводу-виводу дає такий вихід:
Таблиця "Тип параметра". Підрахунок сканування 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
. Здається, не дивно, що саме там є для одного ряду. Я думаю, що це може бути для захисту на Хеллоуїн.