JOIN
kolejność można wymusić umieszczając tabele we właściwej kolejności w FROM
klauzula:
-
MySQL ma specjalną klauzulę o nazwie
STRAIGHT_JOIN
co sprawia, że kolejność ma znaczenie.Użyje to indeksu na
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
A to użyje indeksu na
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle ma specjalną wskazówkę
ORDERED
aby wymusićJOIN
kolejność:Użyje to indeksu na
b.id
lub zbuduj tablicę mieszającą nab
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
A to użyje indeksu na
a.StatusID
lub zbuduj tablicę mieszającą naa
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server ma wskazówkę o nazwie
FORCE ORDER
zrobić to samo:Użyje to indeksu na
b.id
lub zbuduj tablicę mieszającą nab
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
A to użyje indeksu na
a.StatusID
lub zbuduj tablicę mieszającą naa
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
Przykro mi, chłopaki z PostgreSQL. Twoja lista TODO mówi:
Wskazówki dotyczące Optymalizatora (niechciane)
Wskazówki optymalizatora służą do obejścia problemów w optymalizatorze. Wolelibyśmy, aby problemy zostały zgłoszone i naprawione.
Jeśli chodzi o kolejność w porównaniu, nie ma to znaczenia w żadnym RDBMS
, AFAIK.
Chociaż ja osobiście zawsze staram się oszacować, która kolumna będzie wyszukiwana i umieścić tę kolumnę po lewej stronie (aby wyglądała jak lvalue
).
Zobacz tę odpowiedź po więcej szczegółów.