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_JOINna 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.StatusIDA 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
ORDEREDk vynuceníJOINobjednávka:To použije index na
b.idnebo vytvořte hashovací tabulku nab:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDA to bude používat index na
a.StatusIDnebo vytvořte hashovací tabulku naa:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
SQL Server má nápovědu nazvanou
FORCE ORDERudělat totéž:To použije index na
b.idnebo 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.StatusIDnebo 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í.