JOIN
ordning kan framtvingas genom att placera tabellerna i rätt ordning i FROM
klausul:
-
MySQL har en speciell klausul som heter
STRAIGHT_JOIN
vilket gör att beställningen spelar roll.Detta kommer att använda ett index på
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
Och detta kommer att använda ett index på
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle har en speciell ledtråd
ORDERED
för att genomdrivaJOIN
beställning:Detta kommer att använda ett index på
b.id
eller bygg en hashtabell påb
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
Och detta kommer att använda ett index på
a.StatusID
eller bygg en hashtabell påa
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server har en ledtråd som heter
FORCE ORDER
att göra detsamma:Detta kommer att använda ett index på
b.id
eller bygg en hashtabell påb
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
Och detta kommer att använda ett index på
a.StatusID
eller bygg en hashtabell påa
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
PostgreSQL killar, förlåt. Din TODO-lista säger:
Optimeringstips (önskas inte)
Optimeringstips används för att komma runt problem i optimeraren. Vi vill hellre ha problemen rapporterade och åtgärdade.
När det gäller ordningen i jämförelsen spelar den ingen roll i någon RDBMS
, AFAIK.
Även om jag personligen alltid försöker uppskatta vilken kolumn som kommer att sökas efter och placera den här kolumnen till vänster (för att det ska verka som ett lvalue
).
Se det här svaret för mer information.