Как SQL Server оценивает логические выражения? - PullRequest
0 голосов
/ 19 июня 2019

Я пишу немного сложный SQL-запрос, который - я боюсь - может быть тяжелым для выполнения. Поэтому я хотел бы знать, как MS SQL Server работает с некоторыми вещами.

Если существует логическое выражение типа ex1 и ex2, всегда ли сервер оценивает их обоих? Всегда ли он сначала оценивает ex1, а затем ex2 (если необходимо)? Это указано, и могу ли я рассчитывать на это?

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

То, что вы имеете в виду, является краткой оценкой. И, да, если SQL Server оценивает выражения, и первое, что он оценивает, является ложным, то он (необязательно) не оценивает второе.

Есть несколько предостережений по этому поводу. Во-первых, у вас нет возможности узнать, какой SQL Server выберет для оценки первым. Если один дешевый, а другой дорогой (скажем, пользовательская функция), то вы можете управлять порядком выполнения, используя выражение case.

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

0 голосов
/ 20 июня 2019

Сервер сначала оценивает exp1 , и если оно истинно, оценивается exp2 , а если exp1 ложно, то exp2 не оценивается

Sql 'и' логическая операция работают в отличие от 'или' операция

...