理解性能的奥秘——应用程序中慢,SSMS中快——不总是参数嗅探的错
Posted 發糞塗牆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解性能的奥秘——应用程序中慢,SSMS中快——不总是参数嗅探的错相关的知识,希望对你有一定的参考价值。
本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列
接上文:理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程
在我们开始深入研究如何处理参数嗅探相关的性能问题之前,由于这个课题过于广泛,所以首先先介绍一些跟参数嗅探没有直接关系的内容,但是又会导致语句在SSMS和应用程序中存在性能差异的情况。
替换变量和参数:
前面已经接触过,但是在这里对其进行扩展。有时会看到论坛上有人说,某个存储过程很慢,但是把相同的语句提取出来单独执行就很快。真相就是:语句涉及了变量,可能是本地变量或者参数。为了单独检查语句问题,他们把变量替换成常量。但是前面提到过,单独的语句和在存储过程中很不一样,当用常量替换变量时,SQL Server可以更加准确地预估影响行数,从而生成更好的查询计划。并且SQL Server不用考虑下一次运行时,常量会被改变。
另外一个类似的错误就是把参数放入变量中,如:
CREATE PROCEDURE some_sp @par1 int
AS ... -- 某些使用到变量 @par1的语句
以上是关于理解性能的奥秘——应用程序中慢,SSMS中快——不总是参数嗅探的错的主要内容,如果未能解决你的问题,请参考以下文章
理解性能的奥秘——应用程序中慢,SSMS中快——案例:如何应对参数嗅探
理解性能的奥秘——应用程序中慢,SSMS中快——收集解决参数嗅探问题的信息
理解性能的奥秘——应用程序中慢,SSMS中快——SQL Server如何编译存储过程