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_JOINhvilket 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.StatusIDOg 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
ORDEREDfor at håndhæveJOINordre:Dette vil bruge et indeks på
b.ideller byg en hash-tabel påb:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDOg dette vil bruge et indeks på
a.StatusIDeller byg en hash-tabel påa:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
SQL Server har et tip kaldet
FORCE ORDERat gøre det samme:Dette vil bruge et indeks på
b.ideller 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.StatusIDeller 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.