JOIN l'ordine può essere forzato mettendo le tabelle nel giusto ordine nel FROM clausola:
-
MySQL ha una clausola speciale chiamata
STRAIGHT_JOINil 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.StatusIDE 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
ORDEREDper imporre ilJOINordine:Questo utilizzerà un indice su
b.idoppure crea una tabella hash sub:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDE questo utilizzerà un indice su
a.StatusIDoppure crea una tabella hash sua:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
SQL Server ha un suggerimento chiamato
FORCE ORDERper fare lo stesso:Questo utilizzerà un indice su
b.idoppure 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.StatusIDoppure 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.