Re: Does psql evaluate OR conditions in order?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Does psql evaluate OR conditions in order?
Дата
Msg-id 3039.1358372410@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Does psql evaluate OR conditions in order?  (HideMe <r36@tara-lu.com>)
Ответы Re: Does psql evaluate OR conditions in order?
Re: Does psql evaluate OR conditions in order?
Список pgsql-novice
HideMe <r36@tara-lu.com> writes:
> Postgres 9.1
> Ubuntu something.

> We have a stored procedure that performs the following evaluations:

> IF ST_Intersects(line1, line2) OR ST_Intersects(line3, line4) THEN
>     do stuff
> ELSIF ST_Intersects(line5, line6) OR ST_Intersects(line7, line8) THEN
>     do stuffB
> END IF;

> 98% of the time the 2nd half of these IF statements will never be true.
> ST_Intersects is an expensive operations to perform.

> Given we're executing this across a lot of data... avoiding expensive
> calls is a good idea.
> So, can we count on the evaluation of the 1st half of the IF's being
> done first before trying the 2nd half,

In principle the order of ORs is not guaranteed, but that mainly has to
do with execution of query WHERE clauses, wherein the optimizer will
feel free to move sub-clauses to different relations, join levels, etc.
I think you're reasonably safe to assume that OR is left-to-right in
this simple context.

> or should we re-write the IF/ELSE to

> IF ST_Intersects(line1, line2) THEN
>     do stuff
> ELSIF ST_Intersects(line5, line6) THEN
>     do stuffB
> ELSIF ST_Intersects(line3, line4) THEN
>     do stuff
> ELSIF ST_Intersects(line7, line8) THEN
>     do stuffB
> END IF;

That doesn't look like it produces quite the same results ...

            regards, tom lane


В списке pgsql-novice по дате отправления:

Предыдущее
От: HideMe
Дата:
Сообщение: Does psql evaluate OR conditions in order?
Следующее
От: Roxanne Reid-Bennett
Дата:
Сообщение: Re: Does psql evaluate OR conditions in order?