Dela via


OPTION-sats (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

Anger att det angivna frågetipset ska användas i hela frågan. Varje frågetips kan bara anges en gång, även om flera frågetips tillåts. Endast en OPTION sats kan anges med -instruktionen.

Den här satsen kan anges i instruktionen SELECT, DELETE, UPDATEoch MERGE .

Transact-SQL syntaxkonventioner

Syntax

Syntax för SQL Server, Azure SQL Managed Instance och Azure SQL Database:

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

Syntax för warehouse i 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>'

Syntax för Azure Synapse Analytics and Analytics Platform System (PDW) och SQL Analytics-slutpunkten i 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

Syntax för serverlös SQL-pool i Azure Synapse Analytics:

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

<query_option> ::=
    LABEL = label_name

Arguments

query_hint

Nyckelord som anger vilka optimerartips som används för att anpassa hur databasmotorn bearbetar instruktionen. Mer information finns i Frågetips.

Examples

Kodexemplen i den här artikeln använder AdventureWorks2022- eller AdventureWorksDW2022-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.

A. Använda en OPTION-sats med en GROUP BY-sats

I följande exempel visas hur OPTION satsen används med en GROUP BY -sats.

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

Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)

B. SELECT-instruktion med en etikett i OPTION-satsen

I följande exempel visas en Azure Synapse Analytics-instruktion SELECT med en etikett i OPTION -satsen.

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

C. SELECT-instruktion med ett frågetips i OPTION-satsen

I följande exempel visas en SELECT instruktion som använder ett HASH JOIN frågetips i OPTION -satsen.

-- Uses AdventureWorks

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

D. SELECT-instruktion med en etikett och flera frågetips i OPTION-satsen

Följande exempel är en Azure Synapse Analytics-instruktion SELECT som innehåller en etikett och flera frågetips. När frågan körs på beräkningsnoderna tillämpar SQL Server en hashkoppling eller sammanslagningskoppling, enligt den strategi som SQL Server anser är mest optimal.

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

E. Använd ett frågetips när du frågar en vy

I följande exempel skapas en vy med namnet CustomerView och sedan används ett HASH JOIN frågetips i en fråga som refererar till en vy och en tabell.

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. Fråga med ett underval och ett frågetips

I följande exempel visas en fråga som innehåller både ett underval och ett frågetips. Frågetipset tillämpas globalt. Frågetips kan inte läggas till i undermarkeringsinstruken.

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. Tvinga kopplingsordningen att matcha ordningen i frågan

I följande exempel används tipset FORCE ORDER för att tvinga frågeplanen att använda den kopplingsordning som anges av frågan. Det här tipset förbättrar prestanda för vissa frågor, men inte alla frågor.

Den här frågan hämtar partitionsnummer, gränsvärden, gränsvärdestyper och rader per gräns för partitionerna i ProspectiveBuyer databasens ssawPDW tabell.

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. Använda EXTERNALPUSHDOWN

I följande exempel framtvingas pushdown för WHERE -satsen till MapReduce-jobbet i den externa Hadoop-tabellen.

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

I följande exempel förhindras pushdown av WHERE -satsen till MapReduce-jobbet i den externa Hadoop-tabellen. Alla rader returneras till PDW där WHERE satsen tillämpas.

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

I. Fråga efter data från och med en tidpunkt

gäller för: Warehouse i Microsoft Fabric

Mer information finns i FÖR TIMESTAMP-frågetips.

Använd syntaxen TIMESTAMPOPTION i -satsen för att fråga efter data som tidigare, i Fabric Data Warehouse. Följande exempelfråga returnerar data som de visades den 13 mars 2024 kl. 19:39:35.28 UTC. Tidszonen finns alltid i 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