From: | ALFONSO REYES <alfonsoreyescruz(at)hotmail(dot)com> |
---|---|
To: | <juanrmiranda(at)hotmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: join - versus - exists [performance] |
Date: | 2008-11-16 11:51:26 |
Message-ID: | BLU148-W2079B1BDA006103A8521B3DF100@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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:
select * from tab1 t1
where exists (select 1 from tab2 where t1.pk=t2.pk and t2.tipo='GENERADO')
En este caso el exists es mucho mas rapido que el IN que sería algo asi:
select * from tab1 t1
where t1.pk in (select t2.pk from tab2 where t1.pk=t2.pk and t2.tipo='GENERADO')
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...
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.
Saludos Cordiales
Alfonso :)
From: juanrmiranda(at)hotmail(dot)com
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: RE: [pgsql-es-ayuda] join - versus - exists [performance]
Date: Sat, 15 Nov 2008 14:09:34 -0100
> 2008/11/15 Jaime Casanova <jcasanov(at)systemguards(dot)com(dot)ec>:
> Y mas menos dentro de este mismo contexto bajo su punto de vista que
> es mejor usar, cruzamiento de tablas de la manera
>
> Select a.campo1
> b.campo2
> From Foo1 a,
> Foo2 b
> Where a.id = b.id
>
> O usar producto cartesiano entre tablas .. a mi personalmente no me
> gusta usar left join .. outer join etc... porque encuentro que el
> codigo queda a veces confuso....pero a nivel de rendimiento existen
> grandes diferencias????
Precisamente ese es mi punto, ya me quedo claro que es mejor el EXISTS que el JOIN, por mayor velocidad, pero por ahí comentaron que el NOT EXITS no es igual de rápido, por eso pregunte, entonces es mejor utilizar el JOIN adecuado para este tipo de cruce?¿ será que la diferencia es tan grande entre ellos?
en mi caso particular JOIN no lo ocupo, en ninguno de su tipo, porque como dice Jaime es muy confuso la estructura SQL, el script queda tan engorroso que no se entiende a simple vista....
por ello, si la diferencia en tiempos entre ellos es abismal ni modo mi inclinaré por algún JOIN en lugar del NOT EXISTS...
Get news, entertainment and everything you care about at Live.com. Check it out!
_________________________________________________________________
Connect to the next generation of MSN Messenger
http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&source=wlmailtagline
From | Date | Subject | |
---|---|---|---|
Next Message | ALFONSO REYES | 2008-11-16 12:34:57 | RE: consecutivo |
Previous Message | Guido Barosio | 2008-11-16 02:38:09 | Re: PG Day |