Порядок исполнения в каком состоянии

0
Select * from tableA
Where gender=‘m and (job title = ‘manager or marital_status=‘m)

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

То есть:

  • Сначала он проверяет пол, и если он удовлетворяет, то он проверяет (job title= 'manager or marital_status='m)
  • Или он выполняет (job title= 'manager or marital_status='m) а затем проверяет наличие пола.
Показать ещё 1 комментарий
Теги:

1 ответ

2

В общем случае порядок вычисления выражения не установлен в SQL.

Механизмы базы данных могут свободно оцениваться в любом порядке, поскольку они могут оптимизировать запрос. Например:

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

  • В качестве альтернативы, если таблица имеет индекс по gender, двигатель может ПЕРВЫМ использовать gender как "доступ", а THEN использовать marital_status и job_title качестве "фильтрации".

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

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

  • 1
    Реальный ответ ... это зависит от того, что решит оптимизатор запросов MySQL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню