Предложение OPTION (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в базе данных Microsoft Fabric SQL в Microsoft Fabric
Указывает, что показанное указание запроса должно быть использовано во всем запросе. Каждое указание запроса может быть задано только один раз, однако разрешены множественные указания запроса. С помощью инструкции можно указать только одно OPTION
предложение.
Это предложение можно указать в SELECT
инструкциях , UPDATE
DELETE
и MERGE
инструкциях.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис SQL Server, Управляемый экземпляр SQL Azure и База данных SQL Azure:
[ OPTION ( <query_hint> [ , ...n ] ) ]
Синтаксис для хранилища в Microsoft Fabric:
OPTION ( <query_option> [ , ...n ] )
<query_option> ::=
LABEL = label_name |
<query_hint>
<query_hint> ::=
HASH JOIN
| LOOP JOIN
| MERGE JOIN
| FORCE ORDER
| { FORCE | DISABLE } EXTERNALPUSHDOWN
| FOR TIMESTAMP AS OF '<point_in_time>'
Синтаксис для azure Synapse Analytics и платформы аналитики (PDW) и конечной точки аналитики SQL в Microsoft Fabric:
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
Аргументы
query_hint
Ключевые слова, которые указывают, какие указания оптимизатора применяются при настройке способа обработки инструкции ядром СУБД. Дополнительные сведения см. в разделе Указания запросов.
Примеры
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
А. Использование предложения 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)
B. Инструкция SELECT с меткой в предложении OPTION
В следующем примере показана инструкция Azure Synapse Analytics SELECT
с меткой в предложении OPTION
.
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 решает наиболее оптимальным.
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
на представление и таблицу.
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
F. Запрос с подвыборкой и указанием запроса
В приведенном ниже примере показан запрос, который содержит как подвыборку, так и указание запроса. Указание запроса применяется глобально. Подсказки запросов не могут быть добавлены в инструкцию subselect.
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
указание, чтобы заставить план запроса использовать порядок соединения, указанный запросом. Это указание повышает производительность некоторых запросов, но не всех запросов.
Этот запрос получает номера секций, значения границ, типы значений границ и строки для секций ssawPDW
в ProspectiveBuyer
таблице базы данных.
SELECT sp.partition_number,
prv.value AS boundary_value,
lower(sty.name) AS boundary_value_type,
sp.rows
FROM sys.tables st
INNER JOIN sys.indexes si
ON st.object_id = si.object_id AND si.index_id < 2
INNER JOIN sys.partitions sp
ON sp.object_id = st.object_id AND sp.index_id = si.index_id
INNER JOIN sys.partition_schemes ps
ON ps.data_space_id = si.data_space_id
INNER JOIN sys.partition_range_values prv
ON prv.function_id = ps.function_id
INNER JOIN sys.partition_parameters pp
ON pp.function_id = ps.function_id
INNER 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);
I. Запрос данных в момент времени
Область применения: хранилище в Microsoft Fabric
Дополнительные сведения см . в подсказке запроса FOR TIMESTAMP.
TIMESTAMP
Используйте синтаксис в OPTION
предложении, чтобы запросить данные, которые существовали в прошлом, в Хранилище данных Synapse в Microsoft Fabric. Следующий пример запроса возвращает данные, как он появился 13 марта 2024 г. в 7:39:35.28 ВЕЧЕРА UTC. Часовой пояс всегда находится в формате UTC.
SELECT OrderDateKey,
SUM(SalesAmount) AS TotalSales
FROM FactInternetSales
GROUP BY OrderDateKey
ORDER BY OrderDateKey
OPTION (FOR TIMESTAMP AS OF '2024-03-13T19:39:35.28');--March 13, 2024 at 7:39:35.28 PM UTC