Поделиться через


Предложение OPTION (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric

Указывает, что показанное указание запроса должно быть использовано во всем запросе. Каждое указание запроса может быть задано только один раз, однако разрешены множественные указания запроса. С помощью инструкции можно указать только одно OPTION предложение.

Это предложение можно указать в SELECTинструкциях , UPDATEDELETEи 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

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

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');

C. Инструкция 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