У меня есть следующий запрос, и я пытаюсь понять, насколько хорошо написано, могу ли я иметь наилучшую возможную производительность
UPDATE UserSession
SET
PauseSpan = CASE State WHEN 9 THEN PauseSpan + @SPAN ELSE PauseSpan END,
PauseSpanTotal = CASE State WHEN 9 THEN PauseSpanTotal + @SPAN ELSE PauseSpanTotal END,
PendSpan = CASE State WHEN 5 THEN PendSpan + @SPAN ELSE PendSpan END,
PendSpanTotal = CASE State WHEN 5 THEN PendSpanTotal + @SPAN ELSE PendSpanTotal END
WHERE State = 9 OR State = 5
Как видите, оператор WHERE
вызовет фильтрацию двух типов записей с состояниями 9 и 5.
Поскольку некоторые из операторов CASE
не будут удовлетворены, поведение ELSE по умолчанию приведет к тому, что результатом будет значение NULL, и оператор потерпит неудачу, так как рассматриваемые столбцы не обнуляются.
Итак, вы можете видеть, что я добавил ELSE в конец каждого оператора и передал ему имя столбца, поскольку, насколько я понимаю, это просто заставит столбец сохранить значение по умолчанию, если CASE не будет совпадать.
Вопрос в том, повлияет ли это на производительность, так как значения по умолчанию будут перезаписаны в каждый столбец?