Предложение OPTION (Transact-SQL)
Применимо к:SQL Server
Azure SQL Database
Azure Sql Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
SQL Endpoint in Microsoft Fabric Warehouse in Microsoft Fabric
Указывает, что показанное указание запроса должно быть использовано во всем запросе. Каждое указание запроса может быть задано только один раз, однако разрешены множественные указания запроса. В выражении может быть использовано только одно предложение OPTION.
Это предложение может быть указано в инструкциях SELECT, DELETE, UPDATE и MERGE.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис для SQL Server и базы данных SQL Azure
[ OPTION ( <query_hint> [ ,...n ] ) ]
Синтаксис для Системы платформы Azure Synapse Analytics и Analytics (PDW)
OPTION ( <query_option> [ ,...n ] )
<query_option> ::=
LABEL = label_name |
<query_hint>
<query_hint> ::=
HASH JOIN
| LOOP JOIN
| MERGE JOIN
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
Синтаксис бессерверного пула SQL в Azure Synapse Analytics
OPTION ( <query_option> [ ,...n ] )
<query_option> ::=
LABEL = label_name
Примечание.
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
query_hint
Ключевые слова, которые указывают, какие указания оптимизатора применяются при настройке способа обработки инструкции ядром СУБД. Дополнительные сведения см. в разделе Указания запросов (Transact-SQL).
Примеры
A. Использование предложения OPTION с предложением GROUP BY
В следующем примере демонстрируется совместное использование предложений OPTION
и GROUP BY
.
USE AdventureWorks2022;
GO
SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
WHERE UnitPrice < $5.00
GROUP BY ProductID, OrderQty
ORDER BY ProductID, OrderQty
OPTION (HASH GROUP, FAST 10);
GO
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
Б. Инструкция SELECT с меткой в предложении OPTION
В следующем примере показана инструкция AZURE Synapse Analytics SELECT с меткой в предложении OPTION.
-- Uses AdventureWorks
SELECT * FROM FactResellerSales
OPTION ( LABEL = 'q17' );
В. Инструкция SELECT с указанием запроса в предложении OPTION
В приведенном ниже примере показана инструкция SELECT, в которой используется указание запроса HASH JOIN в предложении OPTION.
-- Uses AdventureWorks
SELECT COUNT (*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (HASH JOIN);
D. Инструкция SELECT с меткой и несколькими указаниями запроса в предложении OPTION
В следующем примере приведена инструкция AZURE Synapse Analytics SELECT, содержащая метку и несколько подсказок запроса. При выполнении запроса на вычислительных узлах SQL Server будет применять хэш-соединение или соединение слиянием в соответствии с стратегией, которую SQL Server решает наиболее оптимальным.
-- Uses AdventureWorks
SELECT COUNT (*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION ( Label = 'CustJoin', HASH JOIN, MERGE JOIN);
Д. Использование указания запроса при запросе представления
В приведенном ниже примере создается представление с именем CustomerView, а затем указание запроса HASH JOIN используется в запросе, который ссылается на представление и таблицу.
-- Uses the AdventureWorks sample database
CREATE VIEW CustomerView
AS
SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;
GO
SELECT COUNT (*) FROM dbo.CustomerView a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey = b.CustomerKey)
OPTION (HASH JOIN);
GO
DROP VIEW CustomerView;
GO
Е. Запрос с подвыборкой и указанием запроса
В приведенном ниже примере показан запрос, который содержит как подвыборку, так и указание запроса. Указание запроса применяется глобально. Указания запроса нельзя добавлять к инструкции подвыборки.
-- Uses the AdventureWorks sample database
CREATE VIEW CustomerView AS
SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;
GO
SELECT * FROM (
SELECT COUNT (*) AS a FROM dbo.CustomerView a
INNER JOIN dbo.FactInternetSales b
ON ( a.CustomerKey = b.CustomerKey )) AS t
OPTION (HASH JOIN);
G. Принудительное соответствие порядка соединения порядку в запросе
В приведенном ниже примере с помощью указания FORCE ORDER настраивается принудительное использование планом запроса порядка соединения, указанного в запросе. Это повышает производительность некоторых, но не всех запросов.
-- Uses AdventureWorks
-- Obtain partition numbers, boundary values, boundary value types, and rows per boundary
-- for the partitions in the ProspectiveBuyer table of the ssawPDW database.
SELECT sp.partition_number, prv.value AS boundary_value, lower(sty.name) AS boundary_value_type, sp.rows
FROM sys.tables st JOIN sys.indexes si ON st.object_id = si.object_id AND si.index_id <2
JOIN sys.partitions sp ON sp.object_id = st.object_id AND sp.index_id = si.index_id
JOIN sys.partition_schemes ps ON ps.data_space_id = si.data_space_id
JOIN sys.partition_range_values prv ON prv.function_id = ps.function_id
JOIN sys.partition_parameters pp ON pp.function_id = ps.function_id
JOIN sys.types sty ON sty.user_type_id = pp.user_type_id AND prv.boundary_id = sp.partition_number
WHERE st.object_id = (SELECT object_id FROM sys.objects WHERE name = 'FactResellerSales')
ORDER BY sp.partition_number
OPTION ( FORCE ORDER )
;
H. Использование EXTERNALPUSHDOWN
В приведенном ниже примере предложение WHERE принудительно передается в задание MapReduce во внешней таблице Hadoop.
SELECT ID FROM External_Table_AS A
WHERE ID < 1000000
OPTION (FORCE EXTERNALPUSHDOWN);
В приведенном ниже примере запрещается передача предложения WHERE в задание MapReduce во внешней таблице Hadoop. Все строки будут возвращены В PDW, где применяется предложение WHERE.
SELECT ID FROM External_Table_AS A
WHERE ID < 10
OPTION (DISABLE EXTERNALPUSHDOWN);
См. также
Подсказки (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)
MERGE (Transact-SQL)
DELETE (Transact-SQL)