- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0 |
有这样一种方法。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行,优化器确定了这是一个最好的计划。该计划将缓存并且为后续该查询的执行做好准备。
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |