Udostępnij za pomocą


OPTION, klauzula (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Określa, że wskazana wskazówka zapytania powinna być używana w całym zapytaniu. Każda wskazówka zapytania może być określona tylko raz, chociaż dozwolone jest wiele wskazówek dotyczących zapytań. Za pomocą instrukcji można określić tylko jedną OPTION klauzulę.

Tę klauzulę można określić w instrukcjach SELECT, DELETE, UPDATEi MERGE .

Transact-SQL konwencje składni

Syntax

Składnia dla programu SQL Server, usługi Azure SQL Managed Instance i usługi Azure SQL Database:

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

Składnia magazynu w usłudze 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>'

Składnia dla usługi Azure Synapse Analytics and Analytics Platform System (PDW) i punktu końcowego analizy SQL w usłudze 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

Składnia bezserwerowej puli SQL w usłudze Azure Synapse Analytics:

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

<query_option> ::=
    LABEL = label_name

Arguments

query_hint

Słowa kluczowe wskazujące, które wskazówki optymalizatora są używane do dostosowywania sposobu przetwarzania instrukcji przez aparat bazy danych. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące zapytań.

Examples

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

A. Używanie klauzuli OPTION z klauzulą GROUP BY

W poniższym przykładzie pokazano, jak klauzula OPTION jest używana z 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

Przykłady: Azure Synapse Analytics i Analytics Platform System (PDW)

B. Instrukcja SELECT z etykietą w klauzuli OPTION

Poniższy przykład pokazuje SELECT zdanie z etykietą w klauzuli OPTION .

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

C. Instrukcja SELECT z wskazówką zapytania w klauzuli OPTION

W poniższym przykładzie pokazano instrukcję SELECT , która używa HASH JOIN wskazówki dotyczącej zapytania w klauzuli OPTION .

-- Uses AdventureWorks

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

D. Instrukcja SELECT z etykietą i wieloma wskazówkami zapytania w klauzuli OPTION

Poniższy przykład to instrukcja usługi Azure Synapse Analytics SELECT zawierająca etykietę i wiele wskazówek dotyczących zapytań. Gdy zapytanie jest uruchamiane w węzłach obliczeniowych, program SQL Server stosuje sprzężenie skrótu lub sprzężenie scalania, zgodnie ze strategią, którą decyduje program SQL Server, jest najbardziej optymalny.

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

E. Używanie wskazówki dotyczącej zapytania podczas wykonywania zapytań w widoku

Poniższy przykład tworzy widok o nazwie CustomerView, a następnie używa HASH JOIN wskazówki zapytania w zapytaniu odwołującym się do widoku i tabeli.

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. Zapytanie z podwybierzem i wskazówką zapytania

W poniższym przykładzie pokazano zapytanie zawierające zarówno podwybierz, jak i wskazówkę zapytania. Wskazówka dotycząca zapytania jest stosowana globalnie. Nie można dołączyć wskazówek dotyczących zapytań do instrukcji 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. Wymuś kolejność sprzężenia, aby dopasować kolejność w zapytaniu

W poniższym przykładzie użyto FORCE ORDER wskazówki, aby wymusić użycie planu zapytania w celu użycia kolejności sprzężenia określonej przez zapytanie. Ta wskazówka zwiększa wydajność niektórych zapytań, ale nie wszystkich zapytań.

To zapytanie uzyskuje numery partycji, wartości granic, typy wartości granic i wiersze na granicę dla partycji w ProspectiveBuyer tabeli ssawPDW bazy danych.

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. Korzystanie z elementu EXTERNALPUSHDOWN

Poniższy przykład wymusza wypychanie klauzuli WHERE do zadania MapReduce w zewnętrznej tabeli hadoop.

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

Poniższy przykład uniemożliwia wypchnięcie klauzuli WHERE do zadania MapReduce w zewnętrznej tabeli hadoop. Wszystkie wiersze są zwracane do pliku PDW, w którym jest stosowana klauzula WHERE .

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

Przykłady: Microsoft Fabric Data Warehouse

I. Wykonywanie zapytań o dane w określonym punkcie w czasie

Aby uzyskać więcej informacji, zobacz FOR TIMESTAMP query hint (Wskazówki dotyczące zapytania TIMESTAMP).

Składnia TIMESTAMP w klauzuli umożliwia OPTION wykonywanie zapytań o dane w przeszłości w magazynie danych sieci szkieletowej. Następujące przykładowe zapytanie zwraca dane, które pojawiły się 13 marca 2024 r. o 19:39:35.28 UTC. Strefa czasowa jest zawsze w formacie 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. Instrukcja SELECT z etykietą w klauzuli OPTION

Poniższy przykład pokazuje SELECT zdanie z etykietą w klauzuli OPTION . Więcej informacji można znaleźć w artykule Query labels in Fabric Data Warehouse.

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