OPTION 句 (Transact-SQL)OPTION Clause (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

クエリ全体で、指定のクエリ ヒントを使用する必要があることを指定します。Specifies that the indicated query hint should be used throughout the entire query. 複数のクエリ ヒントを使用できますが、各クエリ ヒントを指定できるのは 1 回だけです。Each query hint can be specified only one time, although multiple query hints are permitted. OPTION 句はステートメントで 1 回だけ指定できます。Only one OPTION clause can be specified with the statement.

この句は SELECT、DELETE、UPDATE、MERGE ステートメントで指定できます。This clause can be specified in the SELECT, DELETE, UPDATE and MERGE statements.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
[ OPTION ( <query_hint> [ ,...n ] ) ]   
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
OPTION ( <query_option> [ ,...n ] )  
  
<query_option> ::=  
    LABEL = label_name |  
    <query_hint>  
  
<query_hint> ::=  
    HASH JOIN   
    | LOOP JOIN   
    | MERGE JOIN  
    | FORCE ORDER  
    | { FORCE | DISABLE } EXTERNALPUSHDOWN  

引数Arguments

query_hintquery_hint
データベース エンジンのステートメント処理をカスタマイズするためのオプティマイザー ヒントを示すキーワードです。Keywords that indicate which optimizer hints are used to customize the way the Database Engine processes the statement. 詳細については、「クエリ ヒント (Transact-SQL)」を参照してください。For more information, see Query Hints (Transact-SQL).

使用例Examples

A.A. OPTION 句を GROUP BY 句と共に使用するUsing an OPTION clause with a GROUP BY clause

次の例では、OPTION 句と共に GROUP BY 句を使用する方法を示します。The following example shows how the OPTION clause is used with a GROUP BY clause.

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  

例: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) および Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) and Parallel Data WarehouseParallel Data Warehouse

B.B. SELECT ステートメントと OPTION 句のラベルSELECT statement with a label in the OPTION clause

次は、単純な SQL データ ウェアハウスSQL Data Warehouse SELECT ステートメントと OPTION 句のラベルの例です。The following example shows a simple SQL データ ウェアハウスSQL Data Warehouse SELECT statement with a label in the OPTION clause.

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

C.C. SELECT ステートメントと OPTION 句のクエリ ヒントSELECT statement with a query hint in the OPTION clause

次は、OPTION 句で HASH JOIN クエリ ヒントを使用する SELECT ステートメントの例です。The following example shows a SELECT statement that uses a HASH JOIN query hint in the OPTION clause.

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

D.D. SELECT ステートメントと OPTION 句のラベルと複数のクエリ ヒントSELECT statement with a label and multiple query hints in the OPTION clause

次は、ラベルと複数のクエリ ヒントを含む SQL データ ウェアハウスSQL Data Warehouse SELECT ステートメントの例です。The following example is a SQL データ ウェアハウスSQL Data Warehouse SELECT statement that contains a label and multiple query hints. クエリが計算ノードで実行されるとき、SQL ServerSQL Server は、SQL ServerSQL Server で最適であると判断された方針に基づいて、ハッシュ結合またはマージ結合を適用します。When the query is run on the Compute nodes, SQL ServerSQL Server will apply a hash join or merge join, according to the strategy that SQL ServerSQL Server decides is the most 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.E. ビューにクエリを実行するとき、クエリ ヒントを使用するUsing a query hint when querying a view

次の例では、CustomerView という名前のビューを作成し、ビューとテーブルを参照するクエリで HASH JOIN クエリ ヒントを使用します。The following example creates a view named CustomerView and then uses a HASH JOIN query hint in a query that references a view and a table.

-- Uses AdventureWorks  
  
CREATE VIEW CustomerView  
AS  
SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;  
  
SELECT COUNT (*) FROM dbo.CustomerView a  
INNER JOIN dbo.FactInternetSales b  
ON (a.CustomerKey = b.CustomerKey)  
OPTION (HASH JOIN);  
  
DROP VIEW CustomerView;  
  

F.F. サブセレクトとクエリ ヒントを含むクエリQuery with a subselect and a query hint

次は、サブセレクトとクエリ ヒントの両方が含まれるクエリの例です。The following example shows a query that contains both a subselect and a query hint. クエリ ヒントはグローバルに適用されます。The query hint is applied globally. クエリ ヒントはサブセレクト ステートメントに追加できません。Query hints are not allowed to be appended to the subselect statement.

-- Uses AdventureWorks  
  
CREATE VIEW CustomerView AS  
SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;  
  
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.G. クエリの順序どおりの結合順序を強制するForce the join order to match the order in the query

次の例では、FORCE ORDER ヒントを使用し、クエリで指定されている結合順序を使用するようにクエリ プランに強制します。The following example uses the FORCE ORDER hint to force the query plan to use the join order specified by the query. これですべてではありませんが、一部のクエリでパフォーマンスが改善されます。This will improve performance on some queries; not all queries.

-- 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.H. EXTERNALPUSHDOWN の使用Using EXTERNALPUSHDOWN

次の例では、外部 Hadoop テーブルで MapReduce ジョブに WHERE 句を強制的にプッシュダウンします。The following example forces the pushdown of the WHERE clause to the MapReduce job on the external Hadoop table.

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

次の例では、外部 Hadoop テーブルで MapReduce ジョブに WHERE 句を強制的にプッシュダウンする行為を防止します。The following example prevents the pushdown of the WHERE clause to the MapReduce job on the external Hadoop table. すべての行は、WHERE 句が適用される PDW に戻ります。All rows are returned to PDW where the WHERE clause is applied.

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

参照See Also

Hints (Transact-SQL) Hints (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
MERGE (Transact-SQL) MERGE (Transact-SQL)
DELETE (Transact-SQL)DELETE (Transact-SQL)