Re: join - versus - exists [performance]

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

2008/11/17 Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>:
> 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 :-)

MMmmmm no era eso lo que quieria leer .. pero lo sospeche desde un
principio :P !

Tendre que aprender a hacer la rueda de nuevo :0)

>
>> 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)
> --
> TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo
>

--
Cumprimentos
jchavez
linux User #397972 on http://counter.li.org/

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-11-17 12:12:08 Re: Herencia y claves foraneas
Previous Message Alvaro Herrera 2008-11-17 12:05:51 Re: join - versus - exists [performance]