SQL Server Execution Plan-执行计划

2013-07-07  籽藤 

06年在校学习数据库课程, 到今年也有7个年头.这7年之间装过Oracle, 折腾过MySQL, 当然花时间最多的还是在SQL Server 2008. 可是认知还是停留在left join, select..into,基本上算是在啃老本,少有长进。忏悔无用,还是继续啃红宝书《Beginning - Microsoft SQL Server 2008 Programming》.

 

本文来扯扯SQL Server 2008的执行计划。SQL语句在执行时,会生成执行计划并将它缓存起来,我们可以通过提高使用缓存中的执行计划次数,来减少数据库的压力。在SQL Server Management Studio 中选择[Query]-[Dispaly estimated execution plan] 或[Include Actual Execution Plan]查看当前的执行计划。两个菜单的区别不用详述了,前者是估算出来的,后者是在执行后的结果中显示实际的执行计划。对一些简单的Select语句来说,estimated和actual的执行计划是一样,对并行,还有涉及到临时表的操作来说可能有不同。



测试数据

 

create table test(

id bigint,

insertedDateTime datetime

)

 

declare @i int

declare @dt datetime

 

set @i = 1

while @i <= 10000

begin

insert into test

values(@i,GETUTCDATE())

 

set @i = @i +1

end


统计

 

set statistics profile on

 

use appletest

select * from appletest..test




set statistics profile on 是打开profile,类似地还有set statistics time on ,用于Messages中显示执行时间(如下)。相应的关闭语句是set statistics profile off

 

 SQL Server Execution Times:

   CPU time = 0 ms,  elapsed time = 142 ms.

查询缓存执行计划 

SQL Server 2008提供了一些服务器对象来分析执行计划

Sys.dm_exec_cached_plans    包含缓存的执行计划,每个执行计划对应一行。

Sys.dm_exec_plan_attributes 这是一个系统函数,每一个执行计划都对应着一些属性,在这个系统函数中包含着这些属性。

Sys.dm_exec_sql_text             这是一个系统函数,返回文字格式的执行计划。

Sys.dm_exec_query_plan        这是一个系统函数,返回xml格式的执行计划。

SQL Server 2008还提供了一个兼容性的视图sys.syscacheobject,这个视图中保存了所有的执行计划的信息。

SELECT cp.usecounts AS '使用次数'

            ,objtype AS '类型'

            ,st.[text] AS 'SQL文本'

       ,plan_handle    AS '计划句柄'       

FROM sys.dm_exec_cached_plans cp

CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st

--WHERE st.text not like '%sys%'




综上所述,我们可以通过执行计划去分析Query的效率,并可以参数化SQL,来重用执行计划,从而提高效率。


参考资料:

http://blog.csdn.net/xiao_hn/article/details/4259628 了解SQL Server执行计划

http://www.cnblogs.com/tylerdonet/archive/2011/11/17/2253090.html SQL点滴27―性能分析之执行计划
http://www.blogjava.net/jiabao/archive/2008/04/08/191595.html 关于sql的执行计划
http://www.cnblogs.com/dataadapter/archive/2012/08/02/2620711.html SQL参数化查询的另一个理由――命中执行计划
488°/4884 人阅读/0 条评论 发表评论

登录 后发表评论