JOIN
редът може да бъде принуден чрез поставяне на таблиците в правилния ред в FROM
клауза:
-
MySQL има специална клауза, наречена
STRAIGHT_JOIN
което прави поръчката важна.Това ще използва индекс на
b.id
:SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
И това ще използва индекс на
a.StatusID
:SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
-
Oracle има специален намек
ORDERED
за да наложитеJOIN
поръчка:Това ще използва индекс на
b.id
или изградете хеш таблица наb
:SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
И това ще използва индекс на
a.StatusID
или изградете хеш таблица наa
:SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
-
SQL Server има намек, наречен
FORCE ORDER
за да направите същото:Това ще използва индекс на
b.id
или изградете хеш таблица наb
:SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
И това ще използва индекс на
a.StatusID
или изградете хеш таблица наa
:SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
-
PostgreSQL момчета, съжалявам. Вашият списък със задачи казва:
Съвети за оптимизатор (не са желани)
Подсказките на оптимизатора се използват за заобикаляне на проблеми в оптимизатора. Предпочитаме проблемите да бъдат докладвани и отстранени.
Що се отнася до реда в сравнението, той няма значение във всеки RDBMS
, AFAIK.
Въпреки че аз лично винаги се опитвам да преценя коя колона ще бъде търсена и поставям тази колона вляво (за да изглежда като lvalue
).
Вижте този отговор за повече подробности.