JOIN
volgorde kan worden geforceerd door de tabellen in de juiste volgorde te plaatsen in de FROM
clausule:
-
MySQL heeft een speciale clausule genaamd
STRAIGHT_JOIN
waardoor de volgorde belangrijk is.Dit gebruikt een index op
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
En dit zal een index gebruiken op
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle heeft een speciale hint
ORDERED
om deJOIN
af te dwingen bestelling:Dit gebruikt een index op
b.id
of bouw een hashtabel opb
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
En dit zal een index gebruiken op
a.StatusID
of bouw een hashtabel opa
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server heeft een hint genaamd
FORCE ORDER
om hetzelfde te doen:Dit gebruikt een index op
b.id
of bouw een hashtabel opb
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
En dit zal een index gebruiken op
a.StatusID
of bouw een hashtabel opa
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
PostgreSQL-jongens, sorry. Je TODO-lijst zegt:
Optimizer-hints (niet gewenst)
Optimizer-hints worden gebruikt om problemen in de optimizer te omzeilen. We zien liever dat de problemen worden gemeld en opgelost.
Wat betreft de volgorde in de vergelijking, het maakt niet uit in een RDBMS
, AFAIK.
Hoewel ik persoonlijk altijd probeer in te schatten naar welke kolom zal worden gezocht en deze kolom aan de linkerkant te plaatsen (zodat het lijkt op een lvalue
).
Zie dit antwoord voor meer details.