JOIN
l'ordine può essere forzato mettendo le tabelle nel giusto ordine nel FROM
clausola:
-
MySQL ha una clausola speciale chiamata
STRAIGHT_JOIN
il che rende l'ordine importante.Questo utilizzerà un indice su
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
E questo utilizzerà un indice su
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle ha un suggerimento speciale
ORDERED
per imporre ilJOIN
ordine:Questo utilizzerà un indice su
b.id
oppure crea una tabella hash sub
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
E questo utilizzerà un indice su
a.StatusID
oppure crea una tabella hash sua
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server ha un suggerimento chiamato
FORCE ORDER
per fare lo stesso:Questo utilizzerà un indice su
b.id
oppure crea una tabella hash sub
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
E questo utilizzerà un indice su
a.StatusID
oppure crea una tabella hash sua
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
Ragazzi di PostgreSQL, mi dispiace. Il tuo elenco delle cose da fare dice:
Suggerimenti per l'ottimizzazione (non desiderati)
I suggerimenti per l'ottimizzatore vengono utilizzati per aggirare i problemi nell'ottimizzatore. Preferiamo che i problemi vengano segnalati e risolti.
Per quanto riguarda l'ordine nel confronto, non importa in nessun RDBMS
, AFAIK.
Anche se personalmente cerco sempre di stimare quale colonna verrà cercata e metto questa colonna a sinistra (per farla sembrare un lvalue
).
Vedi questa risposta per maggiori dettagli.