這個測試針對"一個月"的區間來查詢數據。分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函數對表字段做任何動作。