Подсказки в соединении (Transact-SQL)

Подсказки в соединении указывают оптимизатору запросов на выбор определенной стратегии соединения двух таблиц.

Важное примечаниеВажно!

Оптимизатор запросов SQL Server обычно автоматически выбирает наилучший план выполнения запроса. Поэтому подсказки, в том числе <подсказки_по_соединению>, рекомендуется использовать только опытным пользователям и администраторам базы данных в случае крайней необходимости.

Область применения:

DELETE

SELECT

UPDATE

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

<join_hint> ::= 
     { LOOP | HASH | MERGE | REMOTE }

Аргументы

  • LOOP | HASH | MERGE
    Задает использование циклов, хэша и операций объединения при соединении в запросе. Использование LOOP | HASH | MERGE JOIN автоматически создает соединение между двумя таблицами. Аргумент LOOP не может указываться вместе с параметрами RIGHT или FULL в качестве типа соединения.

  • REMOTE
    Задает, что операция соединения проводится на странице таблицы, расположенной справа. Данный аргумент удобно использовать в случае, когда таблица, расположенная слева, является локальной, а справа располагается удаленная таблица. Аргумент REMOTE может использоваться в случае, когда в таблице слева содержится меньшее количество строк, чем в таблице справа.

    Если таблица, расположенная справа, является локальной, то операция соединения также проводится локально. Если обе таблицы являются удаленными, но расположены в различных источниках данных, то при задании аргумента REMOTE операция соединения проводится на странице таблицы, расположенной справа. Если обе таблицы являются удаленными таблицами в одном источнике данных, то аргумент REMOTE не требуется.

    Аргумент REMOTE не может быть использован для сравнения в предикате соединения значений, одно из которых приведено к другим параметрам сортировки с помощью предложения COLLATE.

    Аргумент REMOTE может быть использован только при операциях INNER JOIN.

Замечания

Подсказки по соединению указываются в запросе в предложении FROM. Подсказки по соединению активируют стратегию соединения между двумя таблицами. При задании подсказок по соединению для любых двух таблиц оптимизатор запросов автоматически активирует порядок соединения для всех соединенных таблиц в запросе, основанном на положении ключевого слова ON. При использовании CROSS JOIN без предложения ON для определения порядка соединения могут использоваться скобки.

Примеры

A. Использование HASH

В следующем примере указывается, что операция JOIN в запросе выполняется с помощью соединения HASH.

USE AdventureWorks;
GO
SELECT p.Name, pr.ProductReviewID
FROM Production.Product p
LEFT OUTER HASH JOIN Production.ProductReview pr
ON p.ProductID = pr.ProductID
ORDER BY ProductReviewID DESC;

Б. Использование LOOP

В следующем примере указывается, что операция JOIN в запросе выполняется с помощью соединения LOOP.

USE AdventureWorks;
GO
DELETE FROM Sales.SalesPersonQuotaHistory 
FROM Sales.SalesPersonQuotaHistory AS spqh
    INNER LOOP JOIN Sales.SalesPerson AS sp
    ON spqh.SalesPersonID = sp.SalesPersonID
WHERE sp.SalesYTD > 2500000.00;
GO

В. Использование MERGE

В следующем примере указывается, что операция JOIN в запросе выполняется с помощью соединения MERGE.

USE AdventureWorks;
GO
SELECT poh.PurchaseOrderID, poh.OrderDate, pod.ProductID, pod.DueDate, poh.VendorID 
FROM Purchasing.PurchaseOrderHeader AS poh
INNER MERGE JOIN Purchasing.PurchaseOrderDetail AS pod 
    ON poh.PurchaseOrderID = pod.PurchaseOrderID;
GO