Delen via


OPTION-component (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricMagazijn in Microsoft FabricSQL-database in Microsoft Fabric Preview

Hiermee geeft u op dat de aangegeven queryhint moet worden gebruikt in de hele query. Elke queryhint kan slechts één keer worden opgegeven, hoewel meerdere queryhints zijn toegestaan. Er kan slechts één OPTION component worden opgegeven met de instructie.

Deze component kan worden opgegeven in de SELECTinstructies en DELETEUPDATEMERGE instructies.

Transact-SQL syntaxis-conventies

Syntax

Syntaxis voor SQL Server, Azure SQL Managed Instance en Azure SQL Database:

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

Syntaxis voor warehouse in 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>'

Syntaxis voor Azure Synapse Analytics and Analytics Platform System (PDW) en SQL Analytics-eindpunt in 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

Syntaxis voor een serverloze SQL-pool in Azure Synapse Analytics:

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

<query_option> ::=
    LABEL = label_name

Arguments

query_hint

Trefwoorden die aangeven welke optimizer-hints worden gebruikt om de manier aan te passen waarop de database-engine de instructie verwerkt. Zie queryhintsvoor meer informatie.

Examples

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .

A. Een OPTION-component gebruiken met een GROUP BY-component

In het volgende voorbeeld ziet u hoe de OPTION component wordt gebruikt met een GROUP BY component.

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

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

B. SELECT-instructie met een label in de OPTION-component

In het volgende voorbeeld ziet u een Azure Synapse Analytics-instructie SELECT met een label in de OPTION component.

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

C. SELECT-instructie met een queryhint in de OPTION-component

In het volgende voorbeeld ziet u een SELECT instructie die gebruikmaakt van een HASH JOIN queryhint in de OPTION component.

-- Uses AdventureWorks

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

D. SELECT-instructie met een label en meerdere queryhints in de OPTION-component

Het volgende voorbeeld is een Azure Synapse Analytics-instructie SELECT die een label en meerdere queryhints bevat. Wanneer de query wordt uitgevoerd op de rekenknooppunten, past SQL Server een hash-join of samenvoeging toe op basis van de strategie die SQL Server besluit, is de meest optimale.

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

E. Een queryhint gebruiken bij het uitvoeren van query's op een weergave

In het volgende voorbeeld wordt een weergave met de naam CustomerView gemaakt en wordt vervolgens een HASH JOIN queryhint gebruikt in een query die verwijst naar een weergave en een tabel.

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. Query's uitvoeren met een subselectie en een queryhint

In het volgende voorbeeld ziet u een query die zowel een subselectie als een queryhint bevat. De queryhint wordt globaal toegepast. Queryhints kunnen niet worden toegevoegd aan de subselectie-instructie.

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. De joinvolgorde afdwingen zodat deze overeenkomt met de volgorde in de query

In het volgende voorbeeld wordt de FORCE ORDER hint gebruikt om het queryplan af te dwingen de joinvolgorde te gebruiken die is opgegeven door de query. Deze hint verbetert de prestaties van sommige query's, maar niet alle query's.

Met deze query worden partitienummers, grenswaarden, grenswaardetypen en rijen per grens opgehaald voor de partities in de ProspectiveBuyer tabel van de ssawPDW database.

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 gebruiken

In het volgende voorbeeld wordt de pushdown van de WHERE component naar de MapReduce-taak in de externe Hadoop-tabel gedwongen.

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

In het volgende voorbeeld wordt voorkomen dat de WHERE component naar de MapReduce-taak in de externe Hadoop-tabel wordt gepusht. Alle rijen worden geretourneerd naar PDW waar de WHERE component wordt toegepast.

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

I. Gegevens opvragen vanaf een bepaald tijdstip

van toepassing op: Warehouse in Microsoft Fabric

Zie FOR TIMESTAMP-queryhint voor meer informatie.

Gebruik de TIMESTAMP syntaxis in de OPTION component om gegevens op te vragen zoals deze in het verleden bestonden, in Fabric Data Warehouse. De volgende voorbeeldquery retourneert gegevens zoals weergegeven op 13 maart 2024 om 17:39:35.28 UUR UTC. De tijdzone bevindt zich altijd in 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