我有两个查询,一个查询运行非常快(大约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秒钟
这些是执行计划,最慢的查询在最前面