JOIN el orden se puede forzar poniendo las tablas en el orden correcto en el FROM cláusula:
-
MySQL tiene una cláusula especial llamada
STRAIGHT_JOINlo que hace que el orden importe.Esto usará un índice en
b.id:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusIDY esto usará un índice en
a.StatusID:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID -
Oracle tiene una pista especial
ORDEREDpara hacer cumplir elJOINorden:Esto usará un índice en
b.ido crea una tabla hash enb:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDY esto usará un índice en
a.StatusIDo crea una tabla hash ena:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
SQL Server tiene una sugerencia llamada
FORCE ORDERhacer lo mismo:Esto usará un índice en
b.ido crea una tabla hash enb:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)Y esto usará un índice en
a.StatusIDo crea una tabla hash ena:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER) -
Chicos de PostgreSQL, lo siento. Tu lista de TODO dice:
Sugerencias del optimizador (no deseadas)
Las sugerencias del optimizador se utilizan para solucionar problemas en el optimizador. Preferiríamos que los problemas fueran informados y solucionados.
En cuanto al orden en la comparación, no importa en ningún RDBMS , AFAIK.
Aunque personalmente siempre trato de estimar qué columna se buscará y coloco esta columna a la izquierda (para que parezca un lvalue ).
Ver esta respuesta para más detalles.