фиксированный порядок, слева направо или с право налево, или это по разному может быть:
where fun1(поле1) = 1 and fun2(поле2) = 1 and fun3(поле1) = 1
в итоге сперва выполнится функция 1, если она ок, выполнится функция 2, если вторая ОК то пойдет функция 3 и если та ОК, то строка попадает в выборку
или иначе?
Если по стандарту, порядок вычисления предикатов не определён, т.е., СУБД решает, какое из условий селективнее. Попробуйте обернуть в подзапрос и тяжелые функции снаружи вызвать (хотя это не гарантия, но формально означает, что снаружи функции должны вызываться по строкам, отобранным подзапросом). Кстати в PostgreSQL СУБД обязана будет вызвать функции, если они определены как volatile, независимо от порядка предикатов.
> там есть фиксированный порядок Не гарантируется, как и в любой реализации SQL. IMNSHO, кто этого не знает — не знает SQL даже на "среднем" уровне (потому что иногда будет писать запросы, которые "падают" от любого изменения данных, или при изменении версии СУБД (даже minor или как там эти версии называются в данной СУБД), или даже от изменения настроек). И конкретно в MS SQL фиксированного порядка точно нет, да. > и когда привык к постгресу ms sql начинает разрдражать очень сильно То, что PostgreSQL реже ведёт себя таким образом — это скорее его дефект, понимаете? ;)
Обсуждают сегодня