Я видел изменения производительности для удаления на обычных таблицах в t-sql.
Но есть ли изменения производительности при удалении в табличных переменных, которые нужно сделать?
EDIT
Вот пример:
График становится толще, поскольку UserExclusionEvaluate на самом деле является CTE, но я собираюсь сначала попытаться оптимизировать его вокруг переменной таблицы (если это возможно). Сам CTE работает очень быстро. Просто медленное удаление.
DELETE FROM @UsersCriteria
FROM @UsersCriteria UsersCriteria
WHERE UserId IN (SELECT UserID FROM UserExclusionsEvaluate WHERE PushRuleExclusionMet = 1)
В текущем воплощении @UsersCriteria:
DECLARE @UsersCriteria TABLE
(
UserId int primary key,
PushRuleUserCriteriaType int
)
Я пробовал @UsersCriteria как неосновные и экспериментировал с кластеризованными некластеризованными.
Вероятно, проблема также в IN. Я также попытался присоединиться к подзапросу.
EDIT:
ХОРОШИЕ НОВОСТИ!
После множества игр с SQL, включая перемещение запроса в цепочку CTE, попытки подсказок таблицы и т. Д. И т. Д. И т.
Простое изменение табличной переменной на временную таблицу значительно повысило производительность.
Что действительно интересно, поскольку удаление выполнялось само собой, подзапрос (в CTE) выполнялся сам по себе. Но смешивание этих двух мега замедлилось.
Я полагаю, что оптимизатор не может включиться при использовании CTE в подзапросе? Возможно при смешивании с удалением.