Если первое условие - ЛОЖЬ, тогда второе условие проверяется на SQL Сервер? - PullRequest
3 голосов
/ 15 марта 2020

В предложении where, если первое условие - ЛОЖЬ, тогда второе условие проверяется в SQL Сервер?

Например,

select * 
from users
where (condition 1) AND (condition 2)

Если условие 1 Неверно, условие 2 будет проверено?

Ответы [ 3 ]

3 голосов
/ 15 марта 2020

Это недетерминированность c. Нельзя полагаться на порядок оценки.

SQL Оптимизатор запросов к серверу отвечает за анализ запроса T- SQL и создание плана выполнения на основе размеров таблиц, индексов и т. Д. c. Таким образом, один и тот же оператор T- SQL для одной и той же схемы базы данных может выполняться по-разному в зависимости от содержимого базы данных, конфигурации и т. Д. c.

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

1 голос
/ 16 марта 2020

SQL является декларативным. Не процедурный.

Оптимизатор может использовать оценку короткого замыкания или нет.

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

столбец WHERE> 1

Аналогичным образом оптимизатор может найти, что некоторые условия гарантированно будут истинными или ложными с помощью проверочных ограничений или других предикатов в запросе и не нужно оценивать вообще. Или используйте путь доступа (такой как отфильтрованный индекс), который гарантирует, что все строки соответствуют части предиката, поэтому оценка времени выполнения не требуется. Читать это

1 голос
/ 15 марта 2020

Независимо от приоритета, условия будут проверяться до первого ложного ...

Пример:

select 'Divide by zero error.' 
where 1=1 and (1/0 = 1)


select 'No Divide by zero error' 
where 1=0 and (1/0 = 1)
...