Monday, July 14, 2008

Re: [pgsql-es-ayuda] Plan de ejecución de una consulta con OR

El lun, 14-07-2008 a las 10:51 -0400, Alvaro Herrera escribió:
> Sebastián Villalba escribió:
> > Hola Marcos.
> >
> > On Mon, 14 Jul 2008 10:22:07 -0400, Marcos Saldivar wrote
> > > Estimados tengo la siguiente duda, para una consulta como esta:
> > >
> > > select * from foo where foo.permiso = 'todos' or 1950 in (select
> > > miembro from miembros_grupos)
> > >
> > > Al cumplirse la condición "foo.permiso = 'todos'" es valido pensar
> > > que la sub consulta jamas se ejecutara ????
> >
> > Muy válido. Saludos!
>
> No necesariamente ... me parece que SQL no garantiza que las condiciones
> se evalúan de izquierda a derecha ...
>
> Supongo que es posible que por una cosa de rendimiento la condición que
> involucra la constante sea ejecutada antes que la otra, y que el motor
> se tome la libertad de eliminar el subselect. Por otro lado supongo que
> si el subselect incluyera cosas como una funcion volátil, no podría hacerlo.

Pero acaso el explain no entrega pistas acerca de como resuelve la
consulta ?.
Si no recuerdo mal, las SQL se leen de abajo hacia arriba y de izquierda
a derecha.

Saludos,

-- Mauro

--
TIP 9: visita nuestro canal de IRC #postgresql-es en irc.freenode.net

No comments: