Tim*_*fey 0 sql-server performance sql-server-2008 sql-execution-plan
我有2个存储过程,我想比较并确定哪些需要更少的资源并且性能更好.第二个过程是对第一个过程的修改,它包含第一个过程的略微更改的sql语句.我的目标是了解更改对查询成本的影响.
为此,我使用"包含实际执行计划"选项单独执行每个过程并分析两个执行计划.我的问题是我不能说哪个sql查询以简单的方式表现得更好.
例如,考虑以下第一个存储过程的查询执行计划:
该计划显示查询成本相对于批次为0%,而Clustered Index Seek运算符相对于查询为100%.对于第二个过程的相应查询,我有相同的数字.不幸的是,这还不足以理解哪个查询具有最小的成本.
因此,我的问题是:有没有办法确定整个查询的成本.最好的是带有查询的表及其特定成本,例如CPU成本或I/O成本.
在运行这两个过程之前,您可以使用SET STATISTICS IO ON
(http://msdn.microsoft.com/en-us/library/ms184361.aspx)和SET STATISTICS TIME ON
(http://msdn.microsoft.com/en-us/library/ms190287.aspx) .它将显示有关时间和输入/输出的其他信息.请记住,可以缓存过程的结果,可以缓存计划,因此在进行任何合并之前必须仔细执行.第一次运行总是比下一次慢.在进行任何测试之前,您应该使用DBCC DROPCLEANBUFFERS
和清理缓存DBCC FREEPROCCACHE
.您还应该了解群集和非群集索引,搜索和扫描以及计划中显示的其他操作之间的差异.