Подсказка по соединению (Transact-SQL)
Изменения: 17 июля 2006 г.
Указывать на необходимость использования оптимизатором запросов определенной стратегии соединения двух таблиц.
Важно! |
---|
Оптимизатор запросов SQL Server 2005 обычно автоматически выбирает наилучший план выполнения запроса. Поэтому подсказки, в том числе <подсказки_по_соединению>, рекомендуется использовать только опытным пользователям и администраторам базы данных в случае крайней необходимости. |
Область применения:
Синтаксические обозначения в 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
См. также
Справочник
Другие ресурсы
Основные сведения о хэш-соединениях
Основные сведения о соединении вложенных циклов
Основные сведения о соединениях слиянием
Основные принципы соединения
Использование соединений
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
17 июля 2006 г. |
|