JOIN ordning kan framtvingas genom att placera tabellerna i rätt ordning i FROM klausul:
-
MySQL har en speciell klausul som heter
STRAIGHT_JOINvilket 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.StatusIDOch 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
ORDEREDför att genomdrivaJOINbeställning:Detta kommer att använda ett index på
b.ideller bygg en hashtabell påb:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDOch detta kommer att använda ett index på
a.StatusIDeller 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 ORDERatt göra detsamma:Detta kommer att använda ett index på
b.ideller 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.StatusIDeller 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.