TSQL存储过程上的参数使执行非常缓慢

TSQL存储过程上的参数使执行非常缓慢,tsql,stored-procedures,parameter-passing,Tsql,Stored Procedures,Parameter Passing,在本主题的开头,我将使用DelphiXe2和MicrosoftSQLServer 我公司的所有应用程序都是基于存储过程的,无论您是想要搜索还是操纵数据 但是在一些搜索过程中,我遇到了以下问题:当应用程序触发该过程时,结果显示执行时间非常长。但是,如果我在SQL Management Studio中使用相同的应用程序参数触发相同的过程,执行时间将立即停止 我“解决”的一种方法是在主体内声明过程的相同参数(当然更改名称),并指定相同的值,例如: 创建过程upTest(@ID int,@Name va

在本主题的开头,我将使用DelphiXe2和MicrosoftSQLServer

我公司的所有应用程序都是基于存储过程的,无论您是想要搜索还是操纵数据

但是在一些搜索过程中,我遇到了以下问题:当应用程序触发该过程时,结果显示执行时间非常长。但是,如果我在SQL Management Studio中使用相同的应用程序参数触发相同的过程,执行时间将立即停止

我“解决”的一种方法是在主体内声明过程的相同参数(当然更改名称),并指定相同的值,例如:

创建过程upTest(@ID int,@Name varchar(64))作为开始 声明@vID int=@ID 声明@vName varchar(64)=@Name

当我这样做时,程序被应用程序触发时的执行时间也会立即生效!而且变得更糟。一个昨天运作良好的程序,今天出现了同样的情况


有人知道为什么会这样吗?如果不“重新创建”具有相同类型和值的相同参数,该怎么办?

存储过程在哪里?虽然“搜索过程”的意思是捕获所有将NULL作为“忽略”值的查询,但延迟是不可避免的。这样的查询会导致错误的执行计划,应该避免。PS参数或存储过程没有问题。展示你的CodePlease参数嗅探——关于这一点的规范阅读:必须阅读catch all查询,以及为什么它们对性能如此有害。对“参数嗅探”做一些研究。通过声明局部变量并将其设置为参数,您可以允许SQLServer缓存查询计划,这是很好的。另一方面,您的参数可能会导致对某些参数值的错误计划,因此也要对
选项重新编译
选项优化
进行一些研究。