2015-02-03 2 views
1

Я пытаюсь с некоторой автооптимизацией при создании представления в 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 ...

Спасибо заранее.

+0

Дизайнер просто переделывает предикаты в чем-то можно легко показать в сетке. Он не пытается и не оптимизирует его. –

+0

Ах ладно. Когда я открою представление в дизайнере, а затем сохраню его, заменит ли он оригинальное предложение where, которое он показал для лучшей «видимости сетки»? – Crizztl

+0

Да, я полагаю, это причина. Для облегчения визуального редактирования предикатов. –

ответ

1

Визуальные дизайнеры не пытаются оптимизировать ваш код когда-либо.

Не используйте их, если вы не готовы смириться с ними, форматируя и переписывая свои запросы таким образом.

SQL Server не гарантирует оценку короткого замыкания в любом случае, но, безусловно, этот тип перезаписи может действовать как пессимизация. Особенно, если один из предикатов включает дополнительный запрос, переписанная форма может оказаться значительно дороже.

Предположительно причина перезаписи заключается в том, что она может легко их представить в сетке и разрешить редактирование точек на отдельных пересечениях сетки - или вы можете выбрать весь столбец и удалить.

enter image description here

+1

По моему мнению, ни один код никогда не должен быть написан для производства с использованием дизайнеров. – HLGEM