JOIN
pořadí lze vynutit umístěním tabulek do správného pořadí v FROM
klauzule:
-
MySQL má speciální klauzuli nazvanou
STRAIGHT_JOIN
na pořadí záleží.To použije index na
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
A to bude používat index na
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle má speciální nápovědu
ORDERED
k vynuceníJOIN
objednávka:To použije index na
b.id
nebo vytvořte hashovací tabulku nab
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
A to bude používat index na
a.StatusID
nebo vytvořte hashovací tabulku naa
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server má nápovědu nazvanou
FORCE ORDER
udělat totéž:To použije index na
b.id
nebo vytvořte hashovací tabulku nab
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
A to bude používat index na
a.StatusID
nebo vytvořte hashovací tabulku naa
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
PostgreSQL lidi, omlouvám se. Váš seznam úkolů říká:
Tipy pro Optimalizátor (nežádoucí)
Rady pro optimalizaci se používají k řešení problémů v optimalizátoru. Raději bychom měli problémy nahlásit a opravit.
Co se týče pořadí v porovnání, to v žádném RDBMS
nezáleží , AFAIK.
I když se osobně vždy snažím odhadnout, který sloupec se bude hledat, a dám tento sloupec doleva (aby vypadal jako lvalue
).
Viz tuto odpověď pro více podrobností.