sql性能问题

时间:2011-05-16 08:58:34

标签: sql-server sql-server-2000 query-performance

我在SQL Server 2000中有一个包含24M记录的数据库。

当我运行此查询时

select * from cdr
where starttime between '2011-05-15 00:00:00.000' and '2011-05-16 00:00:00.000'

甚至这个

declare @MinDate char(30) ,@MaxDate char(30)
set @MinDate=substring(convert(char,(getdate()-1), 120),1,10)+' 00:00:00.000'
set @MaxDate=substring(convert(char,(getdate()), 120),1,10)+' 00:00:00.000'
select * from cdr
where starttime between '2011-05-15 00:00:00.000' and @MaxDate

它运行速度非常快,并在第1秒内返回3500条记录,请注意数据库中starttimechar(30)

但是当我运行这个查询时,它只会在10~60秒内返回32条记录

declare @MinDate char(30), @MaxDate char(30)

set @MinDate = substring(convert(varchar, (getdate()-1), 120),1,10)+' 00:00:00.000'
set @MaxDate = substring(convert(varchar, (getdate()), 120),1,10)+' 00:00:00.000'

select * from cdr

where starttime between @MinDate and @MaxDate

:: @MinDate值是2011-05-15 00:00:00.000

请注意starttime已在我的数据库中编入索引

我想知道我的问题是什么?

2 个答案:

答案 0 :(得分:0)

Sql server可能有一个针对查询缓存的查询计划,其中包含2个参数,这些参数不是您的参数值的最佳选择。在sqlserver 2008中,您可以使用Optimize for unknown提示。 http://blogs.msdn.com/b/sqlprogrammability/archive/2008/11/26/optimize-for-unknown-a-little-known-sql-server-2008-feature.aspx 在SQL Server 2000中,您可以尝试本文中提到的其他选项之一。

答案 1 :(得分:0)

herehere相同的问题。使用OPTION (RECOMPILE)