JOIN
rækkefølgen kan forceres ved at placere tabellerne i den rigtige rækkefølge i FROM
klausul:
-
MySQL har en speciel klausul kaldet
STRAIGHT_JOIN
hvilket gør, at rækkefølgen har betydning.Dette vil bruge et indeks på
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
Og dette vil bruge et indeks på
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle har et særligt tip
ORDERED
for at håndhæveJOIN
ordre:Dette vil bruge et indeks på
b.id
eller byg en hash-tabel påb
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
Og dette vil bruge et indeks på
a.StatusID
eller byg en hash-tabel påa
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server har et tip kaldet
FORCE ORDER
at gøre det samme:Dette vil bruge et indeks på
b.id
eller byg en hash-tabel påb
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
Og dette vil bruge et indeks på
a.StatusID
eller byg en hash-tabel påa
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
PostgreSQL gutter, undskyld. Din TODO-liste siger:
Optimeringstip (ønskes ikke)
Optimeringstip bruges til at løse problemer i optimeringsværktøjet. Vi vil hellere have problemerne rapporteret og rettet.
Hvad angår rækkefølgen i sammenligningen, er den ligegyldig i nogen RDBMS
, AFAIK.
Selvom jeg personligt altid prøver at estimere, hvilken kolonne der søges efter, og sætter denne kolonne til venstre (for at den skal virke som en lvalue
).
Se dette svar for flere detaljer.