WEB开发网
开发学院数据库MSSQL Server 如何使用一个SQL Server计划指南来调整查询 阅读

如何使用一个SQL Server计划指南来调整查询

 2009-01-05 10:18:37 来源:WEB开发网   
核心提示:有这样一种方法,SQL Server 2005引进了计划指南,如何使用一个SQL Server计划指南来调整查询,它可以让你把提示增加到特殊的查询中而不用直接改变任何查询本身,某些情况下,由于ProductID出现在总共有121,317行的第4,688行,优化器确定了这是一个最好的计划,你不能更改源代码(或由于源代码是

有这样一种方法。SQL Server 2005引进了计划指南,它可以让你把提示增加到特殊的查询中而不用直接改变任何查询本身。某些情况下,你不能更改源代码(或由于源代码是不能用的或源代码是严禁使用的),那么这可以是很有用的一种工具。然而,要注意这是一种高级的功能,所以使用时要多加注意。

你可以创建三种类型的计划指南。下面来自SQL Server联机帮助的摘录总结了这几种计划指南:

OBJECT 计划指南与事务-SQL存储过程、纯量函数、跨语句表-值函数和DML触发器的上下文环境下执行的查询相匹配。

SQL 计划指南与单机事务-SQL语句和不是数据库对象的成分上下文环境下执行的查询相匹配。基于SQL的计划指南也可以用来匹配确定指定表的参数的查询。

TEMPLATE 计划指南与确定指定表的参数的单机查询相匹配。这些计划指南用来取代一系列的查询成为一个数据库当前参数化的数据库设置选项。

一个计划指南的定义是通过系统存储过程sp_create_plan_guide来实现的:

   sp_create_plan_guide parameters
  EXEC sp_create_plan_guide @name, @stmt, @type, @module_or_batch, @params, @hints
  Here is an explanation of the parameters:
  @name - name of the plan guide
  @stmt - a T-SQL statement or batch
  @type - indicates the type of guide (OBJECT, SQL, or TEMPLATE)
  @module_or_batch - the name of a module (i.e. a stored procedure)
  @params - for SQL and TEMPLATE guides, a string of all parameters for a T-SQL batch to be matched by this plan guide
  @hints - OPTION clause hint to attach to a query as defined in the @stmt parameter

让我们看看下面的例子,该例子模拟一个供应商应用程序执行一个内嵌在它们应用程序代码中的准备好的查询。下面参数化的动态SQL语句获得一个ProductID的SalesOrderDetail信息。   USE AdventureWorks
  GO
  EXEC sp_executesql
  @stmt = N'SELECT * FROM Sales.SalesOrderDetail WHERE ProductID = @ProductID',
  @params = N'@ProductID int', @ProductID = 870
  GO
  EXEC sp_executesql
  @stmt = N'SELECT * FROM Sales.SalesOrderDetail WHERE ProductID = @ProductID',
  @params = N'@ProductID int', @ProductID = 897
  GO

最初执行针对ProductID = 870的查询产生一次表扫描。由于ProductID出现在总共有121,317行的第4,688行,优化器确定了这是一个最好的计划。该计划将缓存并且为后续该查询的执行做好准备。

1 2 3  下一页

Tags:如何 使用 一个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接