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_JOIN
was die Reihenfolge wichtig macht.Dies wird einen Index auf
b.id
verwenden :SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
Und dies wird einen Index auf
a.StatusID
verwenden :SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle hat einen speziellen Hinweis
ORDERED
um denJOIN
zu erzwingen Bestellung:Dies wird einen Index auf
b.id
verwenden oder erstellen Sie eine Hash-Tabelle aufb
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
Und dies wird einen Index auf
a.StatusID
verwenden 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 ORDER
um dasselbe zu tun:Dies wird einen Index auf
b.id
verwenden 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.StatusID
verwenden 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.