SQLServer2000に2400万レコードのデータベースがあります。
このクエリを実行すると
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
それは非常に高速に実行され、最初の10秒で3500レコードを返します。これstarttime
はchar(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-1500:00:00.000です
starttime
私のデータベースで索引付けされていることに注意してください
私の問題は何ですか?