理解性能的奥秘——应用程序中慢,SSMS中快——不总是参数嗅探的错

Posted 發糞塗牆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解性能的奥秘——应用程序中慢,SSMS中快——不总是参数嗅探的错相关的知识,希望对你有一定的参考价值。

本文属于《理解性能的奥秘——应用程序中慢,SSMS中快》系列

接上文:理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程
在我们开始深入研究如何处理参数嗅探相关的性能问题之前,由于这个课题过于广泛,所以首先先介绍一些跟参数嗅探没有直接关系的内容,但是又会导致语句在SSMS和应用程序中存在性能差异的情况。


替换变量和参数:

前面已经接触过,但是在这里对其进行扩展。有时会看到论坛上有人说,某个存储过程很慢,但是把相同的语句提取出来单独执行就很快。真相就是:语句涉及了变量,可能是本地变量或者参数。为了单独检查语句问题,他们把变量替换成常量。但是前面提到过,单独的语句和在存储过程中很不一样,当用常量替换变量时,SQL Server可以更加准确地预估影响行数,从而生成更好的查询计划。并且SQL Server不用考虑下一次运行时,常量会被改变。
另外一个类似的错误就是把参数放入变量中,如: