目的:在不直接更改查询文本的前提下,提高查询性能。
原理:
1.当应用程序向Sql Server发送代码,查询优化器首先检查在缓存中是否有一个适当的询问计划,如果有,查询就按被找到的查询计划执行。
2.如果没有匹配的查询计划,代码将被与一个称为内部查寻表(lookup table)比较, 看是否有一个已存在的计划指南与之匹配。
3.如果在第2步找到匹配的计划指南,询问优化器将修改源代码以包括计划指南中查询提示。源代码中之前的任何查询提示将被新提示替换。
4.查询计划将被编译和缓存。
5.查询将按照你之前在计划指南设定的查询提示执行。
你可以创建三种类型的计划指南。下面来自SQL Server联机帮助的摘录总结了这几种计划指南:
OBJECT 计划指南与事务-SQL存储过程、纯量函数、跨语句表-值函数和DML触发器的上下文环境下执行的查询相匹配。
SQL 计划指南与单机事务-SQL语句和不是数据库对象的成分上下文环境下执行的查询相匹配。基于SQL的计划指南也可以用来匹配确定指定表的参数的查询。
TEMPLATE 计划指南与确定指定表的参数的单机查询相匹配。这些计划指南用来取代一系列的查询成为一个数据库当前参数化的数据库设置选项。
一个计划指南的定义是通过系统存储过程sp_create_plan_guide来实现的。
PS:通过查询sys.syscacheobjects获得缓存中的所有查询计划;通过DBCC FREEPROCACHE清除缓存中的查询计划。
Link: http://msdn.microsoft.com/en-us/library/ms190417.aspx
http://msdn.microsoft.com/en-us/library/ms179880.aspx#Mtps_DropDownFilterText
http://www.techrss.cn/html/2009/01-05/199371.htm