VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > sql数据库 >
  • sql语句大全之OPTION 子句 (Transact-SQL)

OPTION 子句 (Transact-SQL)

本主题适用于:yesSQL Server(从 2008 开始)yesAzure SQL 数据库yesAzure SQL 数据仓库yes并行数据仓库

指定应在整个查询中使用所指定的查询提示。 每个查询提示只能指定一次,但允许指定多个查询提示。 使用该语句只能指定一个 OPTION 子句。

可以在 SELECT、DELETE、UPDATE 和 MERGE 语句中指定此子句。

主题链接图标 TRANSACT-SQL 语法约定

语法


  1.  
    -- Syntax for SQL Server and Azure SQL Database
  2.  
     
  3.  
    [ OPTION ( <query_hint> [ ,...n ] ) ]

  1.  
    -- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse
  2.  
     
  3.  
    OPTION ( <query_option> [ ,...n ] )
  4.  
     
  5.  
    <query_option> ::=
  6.  
    LABEL = label_name |
  7.  
    <query_hint>
  8.  
     
  9.  
    <query_hint> ::=
  10.  
    HASH JOIN
  11.  
    | LOOP JOIN
  12.  
    | MERGE JOIN
  13.  
    | FORCE ORDER
  14.  
    | { FORCE | DISABLE } EXTERNALPUSHDOWN

参数

query_hint 关键字,指示优化器提示用于自定义数据库引擎处理语句的方式。 有关详细信息,请参阅查询提示 (Transact-SQL)

示例

A. GROUP BY 子句中使用的 OPTION 子句

以下示例说明了如何将 OPTION 子句与 GROUP BY 子句一起使用。


  1.  
    USE AdventureWorks2012;
  2.  
    GO
  3.  
    SELECT ProductID, OrderQty, SUM(LineTotal) AS Total
  4.  
    FROM Sales.SalesOrderDetail
  5.  
    WHERE UnitPrice < $5.00
  6.  
    GROUP BY ProductID, OrderQty
  7.  
    ORDER BY ProductID, OrderQty
  8.  
    OPTION (HASH GROUP, FAST 10);
  9.  
    GO

示例: Azure SQL 数据仓库和 并行数据仓库

B. 替换的 OPTION 子句中的标签的 SELECT 语句

下面的示例演示一个简单 SQL 数据仓库替换的 OPTION 子句中的标签的 SELECT 语句。


  1.  
    -- Uses AdventureWorks
  2.  
     
  3.  
    SELECT * FROM FactResellerSales
  4.  
    OPTION ( LABEL = 'q17' );

C. 使用查询提示的 OPTION 子句中的 SELECT 语句

下面的示例演示使用哈希联接的查询提示的 OPTION 子句中的 SELECT 语句。


  1.  
    -- Uses AdventureWorks
  2.  
     
  3.  
    SELECT COUNT (*) FROM dbo.DimCustomer a
  4.  
    INNER JOIN dbo.FactInternetSales b
  5.  
    ON (a.CustomerKey = b.CustomerKey)
  6.  
    OPTION (HASH JOIN);

D. 使用标签和多个查询提示的 OPTION 子句中的 SELECT 语句

下面的示例是 SQL 数据仓库包含一个标签和多个查询提示的 SELECT 语句。 当在计算节点上运行查询 SQL Server将根据策略中应用的哈希联接或合并联接, SQL Server决定是最大程度优化。


  1.  
    -- Uses AdventureWorks
  2.  
     
  3.  
    SELECT COUNT (*) FROM dbo.DimCustomer a
  4.  
    INNER JOIN dbo.FactInternetSales b
  5.  
    ON (a.CustomerKey = b.CustomerKey)
  6.  
    OPTION ( Label = 'CustJoin', HASH JOIN, MERGE JOIN);

E. 查询视图时使用查询提示

下面的示例创建名为 CustomerView 的视图,然后使用引用的视图和表的查询中的哈希联接的查询提示。


  1.  
    -- Uses AdventureWorks
  2.  
     
  3.  
    CREATE VIEW CustomerView
  4.  
    AS
  5.  
    SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;
  6.  
     
  7.  
    SELECT COUNT (*) FROM dbo.CustomerView a
  8.  
    INNER JOIN dbo.FactInternetSales b
  9.  
    ON (a.CustomerKey = b.CustomerKey)
  10.  
    OPTION (HASH JOIN);
  11.  
     
  12.  
    DROP VIEW CustomerView;

F. 使用嵌套 select 语句和查询提示的查询

下面的示例演示包含嵌套 select 语句和查询提示的查询。 查询提示将全局应用。 不允许查询提示追加到嵌套 select 语句。


  1.  
    -- Uses AdventureWorks
  2.  
     
  3.  
    CREATE VIEW CustomerView AS
  4.  
    SELECT CustomerKey, FirstName, LastName FROM ssawPDW..DimCustomer;
  5.  
     
  6.  
    SELECT * FROM (
  7.  
    SELECT COUNT (*) AS a FROM dbo.CustomerView a
  8.  
    INNER JOIN dbo.FactInternetSales b
  9.  
    ON ( a.CustomerKey = b.CustomerKey )) AS t
  10.  
    OPTION (HASH JOIN);

G. 强制实施联接顺序在查询中的顺序相匹配

下面的示例使用强制 ORDER 提示以强制实施查询计划,使用指定的查询联接顺序。 这将提高某些查询; 上的性能并非所有查询。


  1.  
    -- Uses AdventureWorks
  2.  
     
  3.  
    -- Obtain partition numbers, boundary values, boundary value types, and rows per boundary
  4.  
    -- for the partitions in the ProspectiveBuyer table of the ssawPDW database.
  5.  
    SELECT sp.partition_number, prv.value AS boundary_value, lower(sty.name) AS boundary_value_type, sp.rows
  6.  
    FROM sys.tables st JOIN sys.indexes si ON st.object_id = si.object_id AND si.index_id <2
  7.  
    JOIN sys.partitions sp ON sp.object_id = st.object_id AND sp.index_id = si.index_id
  8.  
    JOIN sys.partition_schemes ps ON ps.data_space_id = si.data_space_id
  9.  
    JOIN sys.partition_range_values prv ON prv.function_id = ps.function_id
  10.  
    JOIN sys.partition_parameters pp ON pp.function_id = ps.function_id
  11.  
    JOIN sys.types sty ON sty.user_type_id = pp.user_type_id AND prv.boundary_id = sp.partition_number
  12.  
    WHERE st.object_id = (SELECT object_id FROM sys.objects WHERE name = 'FactResellerSales')
  13.  
    ORDER BY sp.partition_number
  14.  
    OPTION ( FORCE ORDER )
  15.  
    ;

H. 使用 EXTERNALPUSHDOWN

下面的示例在外部 Hadoop 表上强制到 MapReduce 作业的 WHERE 子句的下推。


  1.  
    SELECT ID FROM External_Table_AS A
  2.  
    WHERE ID < 1000000
  3.  
    OPTION (FORCE EXTERNALPUSHDOWN);

下面的示例可防止对外部 Hadoop 表上的 MapReduce 作业的 WHERE 子句的下推。 WHERE 子句应用其中 PDW 到返回所有行。


  1.  
    SELECT ID FROM External_Table_AS A
  2.  
    WHERE ID < 10
  3.  
    OPTION (DISABLE EXTERNALPUSHDOWN);


相关教程