本主题适用于:SQL Server(从 2008 开始)Azure SQL 数据库Azure SQL 数据仓库并行数据仓库
指定应在整个查询中使用所指定的查询提示。 每个查询提示只能指定一次,但允许指定多个查询提示。 使用该语句只能指定一个 OPTION 子句。
可以在 SELECT、DELETE、UPDATE 和 MERGE 语句中指定此子句。
TRANSACT-SQL 语法约定
语法
-- Syntax for SQL Server and Azure SQL Database [ OPTION ( [ ,...n ] ) ]
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse OPTION ( [ ,...n ] ) ::= LABEL = label_name | ::= HASH JOIN | LOOP JOIN | MERGE JOIN | FORCE ORDER | { FORCE | DISABLE } EXTERNALPUSHDOWN
参数
query_hint
关键字,指示优化器提示用于自定义数据库引擎处理语句的方式。 有关详细信息,请参阅查询提示 (Transact-SQL)。
示例
A. GROUP BY 子句中使用的 OPTION 子句
以下示例说明了如何将 OPTION
子句与 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
示例&#xff1a; Azure SQL 数据仓库和 并行数据仓库
B. 替换的 OPTION 子句中的标签的 SELECT 语句
下面的示例演示一个简单 SQL 数据仓库替换的 OPTION 子句中的标签的 SELECT 语句。
SELECT * FROM FactResellerSales OPTION ( LABEL &#61; &#39;q17&#39; );
C. 使用查询提示的 OPTION 子句中的 SELECT 语句
下面的示例演示使用哈希联接的查询提示的 OPTION 子句中的 SELECT 语句。
SELECT COUNT (*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey &#61; b.CustomerKey)
OPTION (HASH JOIN);
D. 使用标签和多个查询提示的 OPTION 子句中的 SELECT 语句
下面的示例是 SQL 数据仓库包含一个标签和多个查询提示的 SELECT 语句。 当在计算节点上运行查询 SQL Server将根据策略中应用的哈希联接或合并联接&#xff0c; SQL Server决定是最大程度优化。
SELECT COUNT (*) FROM dbo.DimCustomer a
INNER JOIN dbo.FactInternetSales b
ON (a.CustomerKey &#61; b.CustomerKey)
OPTION ( Label &#61; &#39;CustJoin&#39;, HASH JOIN, MERGE JOIN);
E. 查询视图时使用查询提示
下面的示例创建名为 CustomerView 的视图&#xff0c;然后使用引用的视图和表的查询中的哈希联接的查询提示。
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 &#61; b.CustomerKey)
OPTION (HASH JOIN); DROP VIEW CustomerView;
F. 使用嵌套 select 语句和查询提示的查询
下面的示例演示包含嵌套 select 语句和查询提示的查询。 查询提示将全局应用。 不允许查询提示追加到嵌套 select 语句。
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 &#61; b.CustomerKey )) AS t
OPTION (HASH JOIN);
G. 强制实施联接顺序在查询中的顺序相匹配
下面的示例使用强制 ORDER 提示以强制实施查询计划&#xff0c;使用指定的查询联接顺序。 这将提高某些查询; 上的性能并非所有查询。
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 &#61; si.object_id AND si.index_id <2
JOIN sys.partitions sp ON sp.object_id &#61; st.object_id AND sp.index_id &#61; si.index_id
JOIN sys.partition_schemes ps ON ps.data_space_id &#61; si.data_space_id
JOIN sys.partition_range_values prv ON prv.function_id &#61; ps.function_id
JOIN sys.partition_parameters pp ON pp.function_id &#61; ps.function_id
JOIN sys.types sty ON sty.user_type_id &#61; pp.user_type_id AND prv.boundary_id &#61; sp.partition_number
WHERE st.object_id &#61; (SELECT object_id FROM sys.objects WHERE name &#61; &#39;FactResellerSales&#39;)
ORDER BY sp.partition_number
OPTION ( FORCE ORDER )
;
H. 使用 EXTERNALPUSHDOWN
下面的示例在外部 Hadoop 表上强制到 MapReduce 作业的 WHERE 子句的下推。
SELECT ID FROM External_Table_AS A
WHERE ID <1000000
OPTION (FORCE EXTERNALPUSHDOWN);
下面的示例可防止对外部 Hadoop 表上的 MapReduce 作业的 WHERE 子句的下推。 WHERE 子句应用其中 PDW 到返回所有行。
SELECT ID FROM External_Table_AS A
WHERE ID <10
OPTION (DISABLE EXTERNALPUSHDOWN);
另请参阅
提示 (Transact SQL )
SELECT (Transact-SQL)
UPDATE (Transact-SQL)
合并 (Transact SQL )
DELETE (Transact-SQL)