Порядок исполнения в каком состоянии - PullRequest
0 голосов
/ 15 сентября 2018
Select * from tableA
Where gender=‘m’ and (job title = ‘manager’ or marital_status=‘m’)

Какое условие будет выполнено первым в предложении where?

1004 * * т.е:
  • Сначала проверяется пол, а если он удовлетворяет, то проверяется (job title = ‘manager’ or marital_status=‘m’)
  • Или он выполняет (job title = ‘manager’ or marital_status=‘m’) и затем проверяет пол.

1 Ответ

0 голосов
/ 15 сентября 2018

Как правило, порядок вычисления выражения не установлен в SQL.

СУБД могут свободно оценивать в любом порядке, поскольку они могут оптимизировать запрос. Например:

  • Если таблица имеет индекс на job_title, движок может FIRST использовать job_title в качестве "доступа", а THEN использовать marital_status и gender как "фильтрация".

  • В качестве альтернативы, если таблица имеет индекс на gender, двигатель может FIRST использовать gender в качестве «доступа» и THEN использовать marital_status и job_title как "фильтрация".

Вы четко видите разницу между доступом и фильтром? Всем механизмам нужен «предикат доступа» для извлечения данных, а затем они используют «предикаты фильтра», чтобы выбрать, какие строки должны быть возвращены.

Иногда нам хотелось бы знать порядок вычисления выражения, особенно для логических условий короткого замыкания. Это не работает в SQL - декларативном языке - так же, как в императивных языках (Java, PHP, C # и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...