Re: join - versus - exists [performance]

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com>
Cc: juanrmiranda(at)hotmail(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: join - versus - exists [performance]
Date: 2008-11-17 12:05:51
Message-ID: 20081117120551.GC4291@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

ALFONSO REYES escribió:
>
> Estimados yo soy nuevo con la base postgres, pero en oracle e manejado
> grandes volumenes, y les comento que la clausula "EXISTS"como "NO
> EXISTS" para subconsultas es mucho pero mucho mas rapido que el "IN" o
> "NOT IN", siempre y cuando la subconsulta sea un sql y no un codigo
> quemado es decir:

El optimizador de Postgres es totalmente diferente del de Oracle.

En Postgres, EXISTS solía ser más rápido que IN (select), hasta que el
manejo de IN fue cambiado en 7.4 (creo). Ahora en 8.4 con lo de los
semijoins y antijoins es posible que las cosas nuevamente sean
diferentes.

En realidad lo único estable que puede decirse es que de una versión a
la siguiente es posible que la versión que antes era más lenta pase a
ser la más rápida, y que la forma de saber es probar ambas :-)

> Respecto al left join y su variante right join, creo que en postgres
> nadie se va a salvar de usuarlos algun momento, pero cuando no es
> necesario yo prefiero el clasico producto cartesiano con el simbolo "=
> ", y no el inner join o sentencias del sql anci...

En Postgres, usar el producto cartesiano con = es lo mismo que usar un
inner join. Los outer join son una herramienta absolutamente
indispensable, y si a alguien le parecen confusos, pues mala suerte :-)

> Si alguien me indica alguna manera de evitar el left join y right
> join, asi como en oracle existe el operador (+) el mismo que se coloca
> en cualquiera de los lados de las comparaciones donde se conoce que no
> va a tener la información.

Como ya dijo Jaime, LEFT y RIGHT son la forma estandar (SQL) de definir
los outer join. La sintaxis (+)= de Oracle predata la definición del
estándar y entiendo que está obsoleta.

--
Alvaro Herrera http://www.amazon.com/gp/registry/CTMLCN8V17R4
"Por suerte hoy explotó el califont porque si no me habría muerto
de aburrido" (Papelucho)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Chávez B. 2008-11-17 12:08:51 Re: join - versus - exists [performance]
Previous Message Gabriel Ferro 2008-11-17 11:37:02 Re: Reemplazar subcadena