Bagikan melalui


Klausa OPTION (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Menentukan bahwa petunjuk kueri yang ditunjukkan harus digunakan di seluruh kueri. Setiap petunjuk kueri hanya dapat ditentukan satu kali, meskipun beberapa petunjuk kueri diizinkan. Hanya satu OPTION klausa yang dapat ditentukan dengan pernyataan .

Klausa ini dapat ditentukan dalam SELECTpernyataan , , DELETEUPDATE, dan MERGE .

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk SQL Server, Azure SQL Managed Instance, dan Azure SQL Database:

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

Sintaks untuk Gudang di 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>'

Sintaks untuk Azure Synapse Analytics and Analytics Platform System (PDW) dan titik akhir analitik SQL di 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

Sintaks untuk kumpulan SQL tanpa server di Azure Synapse Analytics:

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

<query_option> ::=
    LABEL = label_name

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

query_hint

Kata kunci yang menunjukkan petunjuk pengoptimal mana yang digunakan untuk menyesuaikan cara Mesin Database memproses pernyataan. Untuk informasi selengkapnya, lihat Petunjuk Kueri.

Contoh

Sampel kode Transact-SQL dalam artikel ini menggunakan AdventureWorks2022 database sampel atau AdventureWorksDW2022 , yang dapat Anda unduh dari halaman beranda Sampel Microsoft SQL Server dan Proyek Komunitas.

J. Menggunakan klausa OPTION dengan klausa GROUP BY

Contoh berikut menunjukkan bagaimana OPTION klausa digunakan dengan GROUP BY klausa.

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

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

B. Pernyataan SELECT dengan label dalam klausa OPTION

Contoh berikut menunjukkan pernyataan Azure Synapse Analytics dengan label dalam OPTION klausaSELECT.

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

C. Pernyataan SELECT dengan petunjuk kueri dalam klausa OPTION

Contoh berikut menunjukkan SELECT pernyataan yang menggunakan petunjuk kueri dalam OPTION klausaHASH JOIN.

-- Uses AdventureWorks

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

D. Pernyataan SELECT dengan label dan beberapa petunjuk kueri dalam klausa OPTION

Contoh berikut adalah pernyataan Azure Synapse Analytics SELECT yang berisi label dan beberapa petunjuk kueri. Ketika kueri dijalankan pada simpul Komputasi, SQL Server menerapkan gabungan hash atau gabungan gabungan, sesuai dengan strategi yang diputuskan SQL Server adalah yang paling 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. Menggunakan petunjuk kueri saat mengkueri tampilan

Contoh berikut membuat tampilan bernama CustomerView lalu menggunakan HASH JOIN petunjuk kueri dalam kueri yang mereferensikan tampilan dan 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. Kueri dengan subpilih dan petunjuk kueri

Contoh berikut menunjukkan kueri yang berisi subpilih dan petunjuk kueri. Petunjuk kueri diterapkan secara global. Petunjuk kueri tidak dapat ditambahkan ke pernyataan subpilih.

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. Paksa urutan gabungan agar sesuai dengan urutan dalam kueri

Contoh berikut menggunakan FORCE ORDER petunjuk untuk memaksa rencana kueri menggunakan urutan gabungan yang ditentukan oleh kueri. Petunjuk ini meningkatkan performa pada beberapa kueri, tetapi tidak semua kueri.

Kueri ini mendapatkan nomor partisi, nilai batas, jenis nilai batas, dan baris per batas untuk partisi dalam ProspectiveBuyer tabel 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. Gunakan EXTERNALPUSHDOWN

Contoh berikut memaksa pushdown WHERE klausul ke pekerjaan MapReduce pada tabel Hadoop eksternal.

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

Contoh berikut mencegah pushdown WHERE klausul ke pekerjaan MapReduce pada tabel Hadoop eksternal. Semua baris dikembalikan ke PDW tempat WHERE klausul diterapkan.

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

I. Mengkueri data pada titik waktu

Berlaku untuk: Gudang di Microsoft Fabric

Untuk informasi selengkapnya, lihat PETUNJUK kueri TIMESTAMP.

TIMESTAMP Gunakan sintaks dalam OPTION klausa untuk mengkueri data seperti yang ada di masa lalu, di Gudang Data Synapse di Microsoft Fabric. Kueri sampel berikut mengembalikan data seperti yang muncul pada 13 Maret 2024 pukul 19.39.35.28 UTC. Zona waktu selalu dalam 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