为什么第一个sql查询的运行速度比第二个快?

时间:2019-09-03 09:35:49

标签: sql sql-server date

我有两个查询,一个查询运行非常快(大约1秒),另一个查询大约需要8秒钟才能执行。唯一的不同是,我创建了sql变量以在慢速查询中保存开始和结束日期,而在快速查询中,开始和结束日期是即时转换的。

我将在excel报表中使用快速查询,但是日期值每天都会更改,因为该报表每天运行一次,因此需要对它们进行参数化,因此需要第二个查询。我在解释为​​什么两个查询的执行时间如此不同。

两个查询都返回相同数量的行。在表的Channel和Date_Date列上有一个非聚集索引,在ID列上有一个聚集索引。预先感谢您提供的任何帮助。

慢查询(8秒)

declare @startdateStr varchar(8)
declare @enddateStr varchar(8)

select @startdateStr = '20190824'
select @enddateStr = '20190830'

SELECT Date_YYYYMMDD, -- varchar(50) date in YYYYMMDD format 
    Date_Date, -- datetime
    Week_Number, -- int
    Sum(intcol1) AS SumOfIntCol1,
    Sum(intcol2) AS SumOfIntCol2,
    Business_Area
FROM dbo.Table
WHERE [Channel]='ChannelName'
AND convert(date, Date_Date) Between convert(date, @startdateStr)
    And convert(date, @enddateStr)
GROUP BY Date_Date,
    Date_YYYYMMDD,
    Week_Number,
    Business_Area
ORDER BY Date_YYYYMMDD;

快速查询(1秒)

SELECT Date_YYYYMMDD, -- varchar(50) date in YYYYMMDD format 
    Date_Date, -- datetime
    Week_Number, -- int
    Sum(intcol1) AS SumOfIntCol1,
    Sum(intcol2) AS SumOfIntCol2,
    Business_Area
FROM dbo.Table
WHERE [Channel]='ChannelName'
AND convert(date, Date_Date) Between convert(date, '20190824') 
    And convert(date, '20190830')
GROUP BY Date_Date,
    Date_YYYYMMDD,
    Week_Number,
    Business_Area
ORDER BY Date_YYYYMMDD;

我期望第一个查询至少与第二个查询一样快,但是执行它需要8秒钟,而第二个查询需要1秒钟

这些是执行计划,最慢的查询在最前面

enter image description here

0 个答案:

没有答案