Re: Duda sobre JOIN

From: Jaime Casanova <jaime(at)2ndquadrant(dot)com>
To: Lazaro Ruben Garcia Martinez <lgarciam(at)uci(dot)cu>
Cc: FORO POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Duda sobre JOIN
Date: 2012-04-26 16:50:04
Message-ID: CAJKUy5h0_vs3dHyb_o6Z8TkLfxV_c+-2H9qcM43jt0cv_QMp8w@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2012/4/25 Lazaro Ruben Garcia Martinez <lgarciam(at)uci(dot)cu>
>
> Hola a todos en la lista. Les escribo, porque tengo una duda sobre el
> orden (si es que importa) en que se colocan las tablas en una operación de
> unión (JOIN).
>
> Básicamente quiero saber si la tabla que más tuplas tiene, debe ir a la
> izquierda o la derecha, o si el planificador se encarga por si solo de esto.
>

si hablamos de inner join, importa un rabano, postgres no te va a
hacer caso de todos modos:

Ejemplo, tengo una tabla repl_nodes de 2 registros y una tabla
repl_monitor de 1millon. Adjunto el plan de ejecución para la misma
consulta pero con el orden de las tablas cambiado

http://explain.depesz.com/s/pn4
explain analyze
select * from repl_nodes join repl_monitor on (id = standby_node);

http://explain.depesz.com/s/wup
explain analyze
select * from repl_monitor join repl_nodes on (standby_node = id);

como pueden ver usa el mismo plan de ejecucion. eso es porque en INNER
JOIN postgres toma la decision que mejor favorezca, en cambio cuando
se usa {LEFT | RIGHT | FULL} JOIN en esos casos postgres tiene pocas
opciones (a menos que esten en 9.0 o 9.1 donde postgres sabe que puede
cambiar el orden de las tablas siempre que cambie el LEFT por RIGHT)

--
Jaime Casanova         www.2ndQuadrant.com
Professional PostgreSQL: Soporte 24x7 y capacitación

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alejandro Carrillo 2012-04-28 22:35:11 Re: Próximo evento de Comunidades PostgreSQL
Previous Message Yoan Manuel Perez Piñero 2012-04-26 16:01:17 Migracion de Oracle 10g a Postgres 9.1