JOIN Die Reihenfolge kann erzwungen werden, indem die Tabellen im FROM in die richtige Reihenfolge gebracht werden Klausel:
-
MySQL hat eine spezielle Klausel namens
STRAIGHT_JOINwas die Reihenfolge wichtig macht.Dies wird einen Index auf
b.idverwenden :SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusIDUnd dies wird einen Index auf
a.StatusIDverwenden :SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID -
Oracle hat einen speziellen Hinweis
ORDEREDum denJOINzu erzwingen Bestellung:Dies wird einen Index auf
b.idverwenden oder erstellen Sie eine Hash-Tabelle aufb:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDUnd dies wird einen Index auf
a.StatusIDverwenden oder erstellen Sie eine Hash-Tabelle aufa:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
SQL Server hat einen Hinweis namens
FORCE ORDERum dasselbe zu tun:Dies wird einen Index auf
b.idverwenden oder erstellen Sie eine Hash-Tabelle aufb:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)Und dies wird einen Index auf
a.StatusIDverwenden oder erstellen Sie eine Hash-Tabelle aufa:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER) -
PostgreSQL-Leute, tut mir leid. Ihre TODO-Liste sagt:
Optimierungshinweise (nicht erwünscht)
Optimierer-Hinweise werden verwendet, um Probleme im Optimierer zu umgehen. Wir möchten lieber, dass die Probleme gemeldet und behoben werden.
Die Reihenfolge im Vergleich spielt in keinem RDBMS eine Rolle , AFAIK.
Obwohl ich persönlich immer versuche abzuschätzen, nach welcher Spalte gesucht wird, und diese Spalte in die linke Spalte zu setzen (damit es wie ein lvalue aussieht ).
Siehe diese Antwort für mehr Details.