Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server存储过程参数会影响查询速度-为什么?_Sql Server_Vb.net - Fatal编程技术网

Sql server SQL Server存储过程参数会影响查询速度-为什么?

Sql server SQL Server存储过程参数会影响查询速度-为什么?,sql-server,vb.net,Sql Server,Vb.net,我正在SQLServer2005上运行一个存储过程,并从VB.net应用程序调用它 这个存储过程的运行时间超过了3分钟,我开始加快它的运行速度。我偶然发现了一个解决方案,将运行时间从3分钟缩短到3秒(不是开玩笑,我是认真的) 但我不明白为什么 我传递的仅有两个参数是开始日期和结束日期(在WHERE子句中使用),如下所示: 尽管经过一些测试,我发现当我在存储过程中硬编码日期时,运行时间从3分钟缩短到了3秒 我的结局是: ALTER PROCEDURE get_OrderLinessByRegion

我正在SQLServer2005上运行一个存储过程,并从VB.net应用程序调用它

这个存储过程的运行时间超过了3分钟,我开始加快它的运行速度。我偶然发现了一个解决方案,将运行时间从3分钟缩短到3秒(不是开玩笑,我是认真的)

但我不明白为什么

我传递的仅有两个参数是开始日期和结束日期(在
WHERE
子句中使用),如下所示:

尽管经过一些测试,我发现当我在存储过程中硬编码日期时,运行时间从3分钟缩短到了3秒

我的结局是:

ALTER PROCEDURE get_OrderLinessByRegion
  @DateFrom DATETIME,
  @DateTo DATETIME
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

       DECLARE @StartDate AS DATETIME
       DECLARE @EndDate AS DATETIME

       SET @StartDate = @DateFrom
       SET @EndDate = @DateTo
       blah, blah, blah
谁能告诉我为什么第二个版本运行得这么快


非常感谢

这听起来像是错误的参数嗅探。您可以阅读本文以获得详细的解释

这是一个糟糕的参数嗅探案例。嗯,我以前从未听说过参数嗅探,所以我在谷歌上找到了这篇文章:。当参数被定义为DATETIME时,为什么会发生参数嗅探?对于该数据类型,执行计划似乎必须始终相同?是的,这是关于该主题的另一篇好文章。这不是关于数据类型的,请再次阅读该文章。这是一个基于特定值的编译执行计划,第一个“Duh…”是我没有注意到你提供了一个链接。第二个“Duh…”是我现在更好地理解了价值观的概念。现在,我如何给你答案?
ALTER PROCEDURE get_OrderLinessByRegion
  @DateFrom DATETIME,
  @DateTo DATETIME
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

       DECLARE @StartDate AS DATETIME
       DECLARE @EndDate AS DATETIME

       SET @StartDate = @DateFrom
       SET @EndDate = @DateTo
       blah, blah, blah