这个测试针对"一个月"的区间来查询数据。分datetime类型和nvachar类型。
先比较datetime类型:
一.datediff函数
declare @beginTime datetime set @beginTime = GETDATE() select top 100 * from [Resume] where DATEDIFF(day,'2013-03-25',UpdateTime)>0 and DATEDIFF(day,'2013-03-25',UpdateTime) < 30 select DATEDIFF(MS,@beginTime,GETDATE()) --result: 26ms
二.大于和小于时间区间
declare @beginTime1 datetime set @beginTime1 = GETDATE() select top 100 * from [Resume] where (UpdateTime>'2013/03/25' and UpdateTime < '2013/04/24') select DATEDIFF(MS,@beginTime1,GETDATE()) --result:20ms
三.between..and..
declare @beginTime2 datetime set @beginTime2 = GETDATE() select top 100 * from [Resume] where UpdateTime between '2013/03/25' and '2013/04/24' select DATEDIFF(MS,@beginTime2,GETDATE()) --result:20ms
再比较nvarchar类型:
一.大于和小于时间区间
declare @beginTime4 datetime set @beginTime4 = GETDATE() select top 100 * from [Resume] where [ExpireDate] >'2014/3/25' and [ExpireDate] < '2014/4/24' select DATEDIFF(MS,@beginTime4,GETDATE()) --result:53ms
二.between..and..
declare @beginTime3 datetime set @beginTime3 = GETDATE() select top 10 * from [Resume] where [ExpireDate] between '2014/3/25' and '2014/4/24' select DATEDIFF(MS,@beginTime3,GETDATE()) --result:53ms
通过以上比较,datetime类型查询数据效率要快的多,程序处理也方便。
同一类型字段按照某一时间区间来查询数据的话,用大于和小于时间区间查询数据效率略高。
查询数据时也不鼓励使用sql函数对表字段做任何动作。