Sdílet prostřednictvím


OPTION – klauzule (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

Určuje, že by se měl použít uvedený tip dotazu v celém dotazu. Každou nápovědu k dotazu je možné zadat pouze jednou, i když je povoleno více tipů dotazu. Pomocí příkazu lze zadat pouze jednu OPTION klauzuli.

Tuto klauzuli lze zadat v příkazech SELECT, DELETE, UPDATEa MERGE příkazy.

Transact-SQL konvence syntaxe

Syntax

Syntaxe pro SQL Server, spravovanou instanci Azure SQL a Azure SQL Database:

[ OPTION ( <query_hint> [ , ...n ] ) ]

Syntaxe pro sklad v 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>'

Syntaxe koncového bodu Azure Synapse Analytics and Analytics Platform System (PDW) a SQL Analytics v 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

Syntaxe bezserverového fondu SQL ve službě Azure Synapse Analytics:

OPTION ( <query_option> [ , ...n ] )

<query_option> ::=
    LABEL = label_name

Arguments

query_hint

Klíčová slova označující, které rady optimalizátoru se používají k přizpůsobení způsobu, jakým databázový stroj zpracovává příkaz. Další informace najdete v části Rady k dotazům.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

A. Použití klauzule OPTION s klauzulí GROUP BY

Následující příklad ukazuje, jak OPTION se klauzule používá s klauzulí 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

Příklady: Azure Synapse Analytics a Analytics Platform System (PDW)

B. Příkaz SELECT s popiskem v klauzuli OPTION

Následující příklad ukazuje SELECT tvrzení s označením ve OPTION větě.

SELECT * FROM FactResellerSales
OPTION (LABEL = 'q17');

C. Příkaz SELECT s nápovědou dotazu v klauzuli OPTION

Následující příklad ukazuje SELECT příkaz, který v klauzuli používá nápovědu HASH JOINOPTION dotazu.

-- Uses AdventureWorks

SELECT COUNT(*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
    ON (a.CustomerKey = b.CustomerKey)
OPTION (HASH JOIN);

D. Příkaz SELECT s popiskem a více nápovědami dotazu v klauzuli OPTION

Následující příklad je příkaz Azure Synapse Analytics SELECT , který obsahuje popisek a několik tipů pro dotazy. Když se dotaz spustí na výpočetních uzlech, SQL Server použije spojení hash nebo slučovací spojení podle strategie, kterou SQL Server rozhodne, je nejoptimálnější.

SELECT COUNT(*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
    ON (a.CustomerKey = b.CustomerKey)
OPTION (Label = 'CustJoin', HASH JOIN, MERGE JOIN);

E. Použití nápovědy k dotazu při dotazování zobrazení

Následující příklad vytvoří zobrazení s názvem CustomerView a pak použije nápovědu HASH JOIN dotazu v dotazu, který odkazuje na zobrazení a tabulku.

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. Dotaz s dílčím výběrem a nápovědou k dotazu

Následující příklad ukazuje dotaz, který obsahuje dílčí výběr i nápovědu dotazu. Nápovědu k dotazu se použije globálně. Nápovědy k dotazu nelze připojit k příkazu 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. Vynutit, aby pořadí spojení odpovídalo pořadí v dotazu

Následující příklad používá nápovědu FORCE ORDER k vynucení plánu dotazu použít pořadí spojení určené dotazem. Tento tip zlepšuje výkon některých dotazů, ale ne všechny dotazy.

Tento dotaz získá čísla oddílů, hodnoty hranic, typy hodnot hranic a řádky na hranici oddílů v ProspectiveBuyer tabulce ssawPDW databáze.

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. Použití EXTERNALPUSHDOWN

Následující příklad vynutí posun WHERE klauzule na úlohu MapReduce v externí tabulce Hadoop.

SELECT ID FROM External_Table_AS A
WHERE ID < 1000000
OPTION (FORCE EXTERNALPUSHDOWN);

Následující příklad zabraňuje posunu WHERE klauzule do úlohy MapReduce v externí tabulce Hadoop. Všechny řádky se vrátí do pdW, kde WHERE se klauzule použije.

SELECT ID FROM External_Table_AS A
WHERE ID < 10
OPTION (DISABLE EXTERNALPUSHDOWN);

Příklady: Microsoft Fabric Data Warehouse

I. Dotazování dat k určitému bodu v čase

Další informace najdete v nápovědě k dotazu TIMESTAMP.

TIMESTAMP Pomocí syntaxe v OPTION klauzuli můžete dotazovat data, která existovala v minulosti v datovém skladu Fabric. Následující ukázkový dotaz vrátí data, která se zobrazila 13. března 2024 v 7:39:35.28 UTC. Časové pásmo je vždy ve standardu 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

J. Příkaz SELECT s popiskem v klauzuli OPTION

Následující příklad ukazuje SELECT tvrzení s označením ve OPTION větě. Pro více informací viz Query labels in Fabric Data Warehouse.

SELECT * FROM FactResellerSales
OPTION (LABEL = 'q17');