Klausa OPTION (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse 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 SELECT
pernyataan , , DELETE
UPDATE
, dan MERGE
.
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
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