Бөлісу құралы:


Указания на присоединение (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Указания на присоединение указывают, что оптимизатор запросов применяет стратегию соединения между двумя таблицами в SQL Server. Общие сведения о синтаксисе соединения и соединения см . в предложении FROM и JOIN, APPLY, PIVOT.

Внимание

Так как оптимизатор запросов SQL Server обычно выбирает оптимальный план выполнения для запроса, мы рекомендуем использовать указания только в качестве последнего средства опытными разработчиками и администраторами баз данных.

Применяется к

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

{ LOOP | ХЭШ | MERGE }

Задает использование циклов, хэша и операций объединения при соединении в запросе. Использование LOOPили HASHMERGE JOIN принудительное соединение между двумя таблицами. LOOP нельзя указывать вместе с RIGHT типом соединения или FULL как тип соединения. Дополнительные сведения см. в статье о соединениях.

REMOTE

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

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

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

REMOTE можно использовать только для INNER JOIN операций.

Замечания

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

Примеры

Примеры кода Transact-SQL в этой статье используют AdventureWorks2022 базу данных или AdventureWorksDW2022 пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.

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

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

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

B. Использование ЦИКЛА

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

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

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

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

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