Re: Plan de ejecución de una consulta con OR

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Marcos Saldivar <baron(dot)rojo(dot)cuerdas(dot)de(dot)acero(at)gmail(dot)com>
Cc: Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>, Postgresql <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Plan de ejecución de una consulta con OR
Date: 2008-07-14 15:47:23
Message-ID: 20080714154723.GE4050@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Marcos Saldivar escribió:

> Entonces lo mas adecuado es no confiar a menos que las subconsultas
> cumplan con condiciones
> de como que no incluyeran un función volátil ???

Hmm ...

> por ejemplo:
>
> db=> create table bar(id bigserial primary key);
> db=> create table foo(id bigserial primary key);
> db=> insert into foo select generate_series(1, 20);
> db=> insert into bar select generate_series(10, 50);

Tus tablas de ejemplo son muy chicas para mi gusto ... con unas 10000
tuplas en cada una sería más creíble y empezaría a usar indexscans donde
fuera apropiado (obviamente además debes crear los índices)

> db=> explain analyze select * from foo where true or 100 in (select id
> from bar);

Esto es muy diferente de tu pregunta porque el "true" es una constante
al tiempo de crear el plan.

> Lo que pretendo hacer es que la consulta en ultimo caso o en el caso
> mas complejo ejecute varias subconsultas. osea
> si el registro tiene un campo permiso = 't' de todos no tiene caso
> verificar permisos ya que todos tienen acceso, pero en caso de que el
> campo sea distinto de 't' si hay que verificar permisos y ahi entra el
> or osea, si permiso <> 't' hacer subconsulta...

Creo que debe haber maneras mejores de expresar esta consulta ...
probablemente un JOIN. Cualquier cosa que involucre un indexscan y que
te libere del SubPlan debería salir mejor.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Marcelo Retamal Vallejos 2008-07-14 17:11:43 Campo Multivalorado, secuencial
Previous Message Marcos Saldivar 2008-07-14 15:27:55 Re: Plan de ejecución de una consulta con OR