Порядок всего в sql может быть переупорядочен планировщиком запросов так, как он считает нужным, если арифметика позволяет это.Это включает в себя AND, OR, внутренние объединения, некоторые случаи внешних объединений и т. Д. Он также может реорганизовывать операторы IN, отменять вложенные запросы и т. Д.
Так что да, он найдет ваш правильный индекс и т. Д.
Остерегайтесь, чтобы это не взорвалось и на вашем лице.Например, это утверждение:
select y <> 0 and (x / y) > 0;
никогда не будет создавать проблемы, скажем, в C, но в SQL планировщик полностью свободен, чтобы сначала оценить правую часть и подавить деление на ноль ошибок.
Если вы хотите форсировать порядок, вам нужно использовать оператор case:
select case when y <> 0 then (x / y) > 0 else false end;
Последнее примечание: для массивных запросов, полных объединений и подзапросов, планировщики обычно сталкиваются с пороговыми значениями, после которых онибольше не пытайтесь каждый возможный план, и достигните достаточно хорошего запроса, используя генетические алгоритмы.Когда они это делают, порядок соединения и т. Д. Имеет значение.