Megosztás a következőn keresztül:


OPTION záradék (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Azt határozza meg, hogy a megadott lekérdezési tippet a teljes lekérdezésben használni kell. Minden lekérdezési tipp csak egyszer adható meg, bár több lekérdezési tipp is engedélyezett. Az utasítással csak egy OPTION záradék adható meg.

Ez a záradék a , SELECT, DELETEés UPDATE utasításokban MERGEadható meg.

Transact-SQL szintaxis konvenciók

Syntax

Szintaxis az SQL Serverhez, a felügyelt Azure SQL-példányhoz és az Azure SQL Database-hez:

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

A Microsoft Fabric Warehouse szintaxisa:

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

Az Azure Synapse Analytics and Analytics Platform System (PDW) és az SQL Analytics-végpont szintaxisa a Microsoft Fabricben:

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

<query_option> ::=
    LABEL = label_name |
    <query_hint>

<query_hint> ::=
    HASH JOIN
    | LOOP JOIN
    | MERGE JOIN
    | FORCE ORDER
    | { FORCE | DISABLE } EXTERNALPUSHDOWN

Az Azure Synapse Analytics kiszolgáló nélküli SQL-készletének szintaxisa:

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

<query_option> ::=
    LABEL = label_name

Arguments

query_hint

Kulcsszavak, amelyek jelzik, hogy mely optimalizáló tippeket használják az adatbázismotor által az utasítás folyamatának testreszabásához. További információ: Lekérdezési tippek.

Examples

A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.

A. OPTION záradék használata GROUP BY záradékkal

Az alábbi példa bemutatja, hogyan használja a OPTION záradékot egy GROUP BY záradékkal.

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éldák: Azure Synapse Analytics és Analytics Platform System (PDW)

B. SELECT utasítás címkével az OPTION záradékban

A következő példa egy SELECT kijelentést mutat, amelynek címke van a OPTION klauzulában.

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

C. SELECT utasítás lekérdezési tipptel az OPTION záradékban

Az alábbi példa egy olyan utasítást SELECT mutat be, amely lekérdezési tippet HASH JOIN használ a OPTION záradékban.

-- Uses AdventureWorks

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

D. SELECT utasítás címkével és több lekérdezési tipptel az OPTION záradékban

Az alábbi példa egy Azure Synapse Analytics-utasítás SELECT , amely egy címkét és több lekérdezési tippet tartalmaz. Amikor a lekérdezés a számítási csomópontokon fut, az SQL Server kivonat-illesztés vagy egyesítési illesztés alkalmazását alkalmazza az SQL Server által elhatározott stratégia szerint a legoptimálisabb.

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

E. Lekérdezési tipp használata nézet lekérdezéséhez

Az alábbi példa létrehoz egy CustomerView nevű nézetet, majd egy HASH JOIN lekérdezési tippet használ egy nézetre és egy táblára hivatkozó lekérdezésben.

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. Lekérdezés egy alválasztással és egy lekérdezési tipptel

Az alábbi példa egy olyan lekérdezést mutat be, amely egy alválasztást és egy lekérdezési tippet is tartalmaz. A lekérdezési tipp globálisan lesz alkalmazva. A lekérdezési tippek nem fűzhetők hozzá az alkijelölési utasításhoz.

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. Az illesztés sorrendjének kényszerítése a lekérdezésben szereplő sorrendnek való megfeleltetésére

Az alábbi példa a FORCE ORDER tipp használatával kényszeríti a lekérdezéstervet a lekérdezés által megadott illesztés sorrendjének használatára. Ez a tipp néhány lekérdezés teljesítményét javítja, de nem minden lekérdezést.

Ez a lekérdezés a partíciószámokat, a határértékeket, a határértéktípusokat és a határonkénti sorokat szerzi be az ProspectiveBuyerssawPDW adatbázis táblájában lévő partíciókhoz.

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. AZ EXTERNALPUSHDOWN használata

Az alábbi példa a záradék leküldését WHERE a külső Hadoop-tábla MapReduce feladatára kényszeríti.

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

Az alábbi példa megakadályozza a záradék leküldését WHERE a Külső Hadoop-tábla MapReduce-feladatához. A rendszer az összes sort visszaadja a PDW-nek, ahol a WHERE záradékot alkalmazza.

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

Példák: Microsoft Fabric Data Warehouse

I. Adatok lekérdezése időponttól

További információ: FOR TIMESTAMP query hint.

TIMESTAMP A záradék szintaxisával lekérdezheti az OPTION adatokat a múltban, a Fabric Data Warehouse-ban. Az alábbi minta lekérdezés a 2024. március 13-án 19:39:35.28-kor (UTC) megjelenő adatokat adja vissza. Az időzóna mindig UTC-ben van.

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. SELECT utasítás címkével az OPTION záradékban

A következő példa egy SELECT kijelentést mutat, amelynek címke van a OPTION klauzulában. További információért lásd: Lekérdezési címkék a Fabric Data Warehouse területén.

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