JOIN kolejność można wymusić umieszczając tabele we właściwej kolejności w FROM klauzula:
-
MySQL ma specjalną klauzulę o nazwie
STRAIGHT_JOINco 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.StatusIDA 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ę
ORDEREDaby wymusićJOINkolejność:Użyje to indeksu na
b.idlub zbuduj tablicę mieszającą nab:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusIDA to użyje indeksu na
a.StatusIDlub zbuduj tablicę mieszającą naa:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID -
SQL Server ma wskazówkę o nazwie
FORCE ORDERzrobić to samo:Użyje to indeksu na
b.idlub 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.StatusIDlub 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.