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 ).
Вижте този отговор за повече подробности.