Я пытаюсь с некоторой автооптимизацией при создании представления в TSQL. Оптимизация выполняется как при использовании конструктора, так и при использовании CREATE VIEW.T-SQL-просмотр «оптимизирован», но я не понимаю, почему
Выход равен, но я не понимаю, почему это сделано.
Может кто-нибудь, пожалуйста, объясните мне, почему это оптимизировано/почему нижний лучше:
[...]
WHERE
today.statusId = 7
AND yesterday.cardId IS NULL
AND NOT (
today.name LIKE 'TEST_%'
AND today.department LIKE 'T_%'
)
получает оптимизировано в следующий
[...]
WHERE (
today.statusId = 7
AND yesterday.cardId IS NULL
AND NOT (today.name LIKE 'TEST_%')
)
OR (
today.statusId = 7
AND yesterday.cardId IS NULL
AND NOT (today.department LIKE 'T_%')
)
ли не второй, где положение вынуждает вид проверить statusId и cardId два раза независимо от их стоимости? В то время как первый позволяет ему прервать, как только statusId равно 6 (например)
Также в первой части скобки могут быть прерваны, как только одно значение будет FALSE.
Это поведение также не изменяется, когда внутренние круглые скобки содержат 20 значений. Оптимизатор создаст 20 блоков проверки снова и снова значения из StatusID и CardID ...
Спасибо заранее.
Дизайнер просто переделывает предикаты в чем-то можно легко показать в сетке. Он не пытается и не оптимизирует его. –
Ах ладно. Когда я открою представление в дизайнере, а затем сохраню его, заменит ли он оригинальное предложение where, которое он показал для лучшей «видимости сетки»? – Crizztl
Да, я полагаю, это причина. Для облегчения визуального редактирования предикатов. –