У меня есть база данных с 24M записями в SQL Server 2000.
Когда я запускаю этот запрос
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
он работает очень быстро и возвращает 3500 записей в первые 10 секунд, обратите внимание, что starttime
равно char(30)
в базе данных
Но когда я запускаю этот запрос, он просто возвращает 32 записи за 10 ~ 60 секунд
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
проиндексирован в моей базе данных
Я хочу знать, в чем моя проблема?