Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных
SQL AzureУправляемый экземпляр
SQL AzureКонечная точка аналитики SQL в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Указания на присоединение указывают, что оптимизатор запросов применяет стратегию соединения между двумя таблицами в SQL Server. Общие сведения о синтаксисе соединения и соединения см . в предложении FROM и JOIN, APPLY, PIVOT.
Caution
Так как оптимизатор запросов SQL Server обычно выбирает оптимальный план выполнения для запроса, мы рекомендуем использовать указания только в качестве последнего средства опытными разработчиками и администраторами баз данных.
Применимо к
Соглашения о синтаксисе Transact-SQL
Syntax
<join_hint> ::=
{ LOOP | HASH | MERGE | REMOTE | REDUCE | REPLICATE | REDISTRIBUTE [(columns count)]}
Arguments
{ LOOP | ХЭШ | MERGE }
Относится к: Azure SQL Database, Azure SQL Managed Instance, SQL analytics endpoint, SQL database in Microsoft Fabric, Microsoft Fabric Warehouse
Задает использование циклов, хэша и операций объединения при соединении в запросе. Использование LOOPили HASHMERGE JOIN принудительное соединение между двумя таблицами.
LOOP нельзя указывать вместе с RIGHT типом соединения или FULL как тип соединения. Дополнительные сведения см. в статье о соединениях.
REMOTE
Относится к: Azure SQL Database, Azure SQL Managed Instance, SQL analytics endpoint, SQL database in Microsoft Fabric
Задает, что операция соединения проводится на сайте в таблице, расположенной справа. Данный аргумент удобно использовать в случае, когда таблица, расположенная слева, является локальной, а справа располагается удаленная таблица.
REMOTE следует использовать только в том случае, если в левой таблице меньше строк, чем в правой таблице.
Если таблица, расположенная справа, является локальной, то операция соединения также проводится локально. Если обе таблицы являются удаленными, но из разных источников данных, приводит к тому, REMOTE что соединение выполняется на сайте правой таблицы. Если обе таблицы являются удаленными таблицами из одного источника данных, REMOTE не требуется.
REMOTE нельзя использовать, если одно из значений, сравниваемых в предикате соединения, приведение к другому параметров сортировки с помощью COLLATE предложения.
REMOTE можно использовать только для INNER JOIN операций.
REDUCE
применимо к: Azure Synapse Analytics and Analytics Platform System (PDW)
Уменьшает количество подлежащих перемещению строк для таблицы в правой части соединения, чтобы сделать совместимыми два несовместимых столбца распределения. Указание REDUCE также называется указанием полусоединения.
REPLICATE
применимо к: Azure Synapse Analytics, система платформы аналитики (PDW), хранилище Microsoft Fabric
Вызывает операцию широковещательного перемещения, в которой определенная таблица будет реплицирована во всех узлах распространения.
- Используя
REPLICATEс соединениемINNERилиLEFT, операция перемещения трансляции реплицирует правую сторону соединения ко всем узлам. - Аналогичным образом при использовании
REPLICATEс соединениемRIGHTоперация перемещения широковещательной передачи реплицирует левую сторону соединения ко всем узлам. - При использовании
REPLICATEс соединениемFULLневозможно создать предполагаемый план.
ПЕРЕРАСПРЕДЕЛИТЬ [(columns_count)]
применимо к: Azure Synapse Analytics and Analytics Platform System (PDW)
Принудительно распространяет два источника данных на столбцы, указанные в предложении JOIN. Для распределенной таблицы система платформы Аналитики (PDW) выполняет перемешив перемещение по первому столбцу обеих таблиц для реплицированной таблицы, система платформы Аналитики (PDW) выполняет обрезку. Сведения об этих типах перемещения см. в разделе "Операции плана запросов DMS" статьи "Общие сведения о планах запросов" в документации по продукту системы платформы аналитики (PDW). Это указание может повысить производительность в случае, когда план запроса использует широковещательное перемещение для разрешения несовместимого соединения распределения.
применимо к: хранилище Microsoft Fabric
Указание REDISTRIBUTE гарантирует, что два источника данных распределены на основе столбцов предложений JOIN. Он обрабатывает несколько условий соединения, указанных первым n столбцов в обеих таблицах, где n является аргументом column_count. Распространение данных оптимизирует производительность запросов, равномерно распределяя данные между узлами во время промежуточных шагов выполнения.
Аргумент (columns_count) поддерживается только в хранилище Microsoft Fabric.
Remarks
Указания на присоединение указываются в FROM предложении запроса. Указания по соединению принудительно активируют стратегию соединения между двумя таблицами. Если указание соединения указано для всех двух таблиц, оптимизатор запросов автоматически применяет порядок соединения для всех присоединенных таблиц в запросе на основе позиции ON ключевых слов.
CROSS JOIN При использовании без ON предложения скобки можно использовать для указания порядка соединения.
Examples
Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.
A. Используйте 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. Используйте LOOP
В следующем примере операция 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
D. Пример указания соединения REDUCE
В следующем примере используется указание соединения REDUCE для изменения обработки производной таблицы в запросе. При использовании указания соединения REDUCE в этом запросе выполняется проецирование, репликация и разделение fis.ProductKey и последующее соединение с DimProduct во время случайного перемещения DimProduct в ProductKey. Результирующая производная таблица распространяется на fis.ProductKey.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REDUCE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
E. Пример указания соединения REPLICATE
В следующем примере показан тот же запрос, что и в предыдущем примере, за исключением того, что вместо указания соединения REPLICATE используется указание соединения REDUCE. Использование указания REPLICATE приводит к репликации значений в столбце соединения ProductKey из таблицы FactInternetSalesна всех узлах. Таблица DimProduct соединяется с реплицированной версией этих значений.
-- Uses AdventureWorks
SELECT SalesOrderNumber
FROM (
SELECT fis.SalesOrderNumber,
dp.ProductKey,
dp.EnglishProductName
FROM DimProduct AS dp
INNER REPLICATE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey
) AS dTable
ORDER BY SalesOrderNumber;
F. Используйте указание DISTRIBUTIONE, чтобы гарантировать перемещение shuffle для несовместимого соединения распределения
Следующий запрос использует указание запроса REDISTRIBUTE для несовместимого соединения распределения. Это гарантирует, что оптимизатор запросов использует перемещение Shuffle в плане запроса. Это также гарантирует, что план запроса не будет использовать широковещательный перемещение, которое перемещает распределенную таблицу в реплицированную таблицу.
В следующем примере указание REDISTRIBUTE заставляет перемещение shuffle в таблицу FactInternetSales, так как ProductKey является столбцом распространения для DimProduct, и не является столбцом распространения для FactInternetSales.
-- Uses AdventureWorks
SELECT dp.ProductKey,
fis.SalesOrderNumber,
fis.TotalProductCost
FROM DimProduct AS dp
INNER REDISTRIBUTE JOIN FactInternetSales AS fis
ON dp.ProductKey = fis.ProductKey;
G. Использование аргумента счетчика столбцов с указанием REDISTRIBUTE
Следующий запрос использует подсказку запроса REDISTRIBUTE с аргументом счетчика столбцов, а перетасовка выполняется по первым четырем столбцам каждой таблицы в соединении.
SELECT * FROM DA
INNER REDISTRIBUTE (4) JOIN DB
ON DA.a1 = DB.b1