Подсказки соединения дают указания оптимизатору запросов, как должны выполняться операции соединения в запросе. Они заставляют оптимизатор либо соединять таблицы в том порядке, в каком они указаны в предложении from оператора select, либо использовать техники выполнения соединения, явно указанные в операторе. Database Engine поддерживает несколько подсказок соединения:
♦ force order;
♦ loop;
♦ hash;
♦ merge.
Подсказка force order заставляет оптимизатор выполнять соединение таблиц в том порядке, в котором они указаны в запросе. В примере 20.17 показано использование этой подсказки соединения.
Как вы можете видеть, оптимизатор выполняет операцию соединения в том порядке, в котором таблицы появляются в запросе. Это означает, что таблица Employee будет обработана первой, затем таблица Department, а под конец таблица EmpioyeeDepartmentHistory. Если вы выполняете запрос без подсказки force order, то оптимизатор запросов будет обрабатывать таблицы в противоположном порядке: вначале EmpioyeeDepartmentHistory, затем Department, потом Employee.
Подсказки запроса loop, hash и merge заставляют оптимизатор использовать метод циклического соединения, технику слияния соединений и технику хеширования соединений соответственно. Эти три подсказки соединения могут применяться только в том случае, когда операция соединения соответствует стандарту SQL, т. е. когда соединение явно указано при помощи ключевого слова join в предложении from оператора select.
В примере 20.18 показан запрос, который использует метод слияния соединения, потому что подсказка с тем же названием (merge join) явно определена в операторе select. (Вы можете применить другие две подсказки hash и merge тем же самым образом.)
Как вы можете видеть из текстового вывода примера 20.18, оптимизатор запросов должен использовать технику обработки слияния соединения. (Если удалить эту подсказку, то оптимизатор запросов выберет технику хеширования соединений.)
Выбранная подсказка соединения может быть записана в предложении from запроса или при использовании предложения option в конце этого запроса. Если вы собираетесь применять несколько различных подсказок вместе, то рекомендуется предложение option. Пример 20.19 идентичен примеру 20.18, только в нем подсказка соединения указана в предложении from запроса. Обратите внимание, что в этом случае требуется ключевое слово inner.
Текстовый вывод примера 20.19 полностью совпадает с выводом примера 20.18.