Указания на присоединение (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Указания на присоединение указывают, что оптимизатор запросов применяет стратегию соединения между двумя таблицами в SQL Server. Общие сведения о синтаксисе соединения и соединения см . в предложении FROM и JOIN, APPLY, PIVOT.
Внимание
Так как оптимизатор запросов SQL Server обычно выбирает оптимальный план выполнения для запроса, мы рекомендуем использовать указания только в качестве последнего средства опытными разработчиками и администраторами баз данных.
Применяется к
Соглашения о синтаксисе Transact-SQL
Синтаксис
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE }
Аргументы
{ LOOP | ХЭШ | MERGE }
Задает использование циклов, хэша и операций объединения при соединении в запросе. Использование LOOP
или HASH
MERGE 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