Klausul OPTION (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
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 klausa OPTION yang dapat ditentukan dengan pernyataan .
Klausa ini dapat ditentukan dalam pernyataan SELECT, DELETE, UPDATE, dan MERGE.
Sintaks
Sintaks untuk SQL Server dan Azure SQL Database.
[ OPTION ( <query_hint> [ ,...n ] ) ]
Sintaks untuk Azure Synapse Analytics dan Analytics Platform System (PDW)
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 dan 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 (Transact-SQL).
Contoh
A. Menggunakan klausa OPTION dengan klausa GROUP BY
Contoh berikut menunjukkan bagaimana OPTION klausul digunakan dengan klausul GROUP BY .
USE AdventureWorks2012;
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 SELECT Microsoft Azure Synapse Analytics sederhana dengan label dalam klausa OPTION.
-- Uses AdventureWorks
SELECT * FROM FactResellerSales
OPTION ( LABEL = 'q17' );
C. Pernyataan SELECT dengan petunjuk kueri dalam klausa OPTION
Contoh berikut menunjukkan pernyataan SELECT yang menggunakan petunjuk kueri HASH JOIN dalam klausa OPTION.
-- 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 SELECT Microsoft Azure Synapse Analytics yang berisi label dan beberapa petunjuk kueri. Ketika kueri dijalankan pada simpul Komputasi, SQL Server akan menerapkan gabungan hash atau gabungan gabungan, sesuai dengan strategi yang diputuskan SQL Server adalah yang paling optimal.
-- Uses AdventureWorks
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 petunjuk kueri HASH JOIN dalam kueri yang mereferensikan tampilan dan tabel.
-- Uses the AdventureWorks sample database
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 ini memperlihatkan kueri yang berisi subpilih dan petunjuk kueri. Petunjuk kueri diterapkan secara global. Petunjuk kueri tidak diizinkan untuk ditambahkan ke pernyataan subpilih.
-- Uses the AdventureWorks sample database
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 untuk mencocokkan urutan dalam kueri
Contoh berikut menggunakan petunjuk FORCE ORDER untuk memaksa rencana kueri menggunakan urutan gabungan yang ditentukan oleh kueri. Ini akan meningkatkan performa pada beberapa kueri; tidak semua kueri.
-- Uses AdventureWorks
-- Obtain partition numbers, boundary values, boundary value types, and rows per boundary
-- for the partitions in the ProspectiveBuyer table of the ssawPDW database.
SELECT sp.partition_number, prv.value AS boundary_value, lower(sty.name) AS boundary_value_type, sp.rows
FROM sys.tables st JOIN sys.indexes si ON st.object_id = si.object_id AND si.index_id <2
JOIN sys.partitions sp ON sp.object_id = st.object_id AND sp.index_id = si.index_id
JOIN sys.partition_schemes ps ON ps.data_space_id = si.data_space_id
JOIN sys.partition_range_values prv ON prv.function_id = ps.function_id
JOIN sys.partition_parameters pp ON pp.function_id = ps.function_id
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. Menggunakan EXTERNALPUSHDOWN
Contoh berikut memaksa pushdown klausa WHERE ke pekerjaan MapReduce pada tabel Hadoop eksternal.
SELECT ID FROM External_Table_AS A
WHERE ID < 1000000
OPTION (FORCE EXTERNALPUSHDOWN);
Contoh berikut mencegah pushdown klausa WHERE ke pekerjaan MapReduce pada tabel Hadoop eksternal. Semua baris dikembalikan ke PDW tempat klausa WHERE diterapkan.
SELECT ID FROM External_Table_AS A
WHERE ID < 10
OPTION (DISABLE EXTERNALPUSHDOWN);
Lihat juga
Petunjuk (Transact-SQL)
SELECT (Transact-SQL)
UPDATE (Transact-SQL)
MERGE (Transact-SQL)
DELETE (Transact-SQL)
