日期:2014-05-18  浏览次数:20553 次

求助:关于使用between日期 and 日期 的效率问题
在对一段时间内数据进行选择时,同样使用“between日期 and 日期”,日期为常量时快,使用变量时慢。比如:
select * from salesdetails where InvoiceDate between ‘2007-10-21’and ‘2007-10-22’

要比下面用变量的快很多

declare @date1 as datetime,@date2 as datetime
set @date1 = ‘2007-10-21’
set @date2 = ‘2007-20-22’
select * from salesdetails where InvoiceDate between @date1 and @date2

------解决方案--------------------
这样查出来的应该只是10-21号的记录。
------解决方案--------------------
效率上決不會有區別的
------解决方案--------------------
declare @date1 as datetime,@date2 as datetime 
set @date1 = ‘2007-10-21’ 
set @date2 = ‘2007-20-22’ 
这种写法好象不对吧,两个变量全为datetime类型,一赋值成字符串了

------解决方案--------------------
declare @date1 as datetime,@date2 as datetime
set @date1 = '1993-01-01'
set @date2 = '1993-12-01'
select * from sales where ord_date between @date1 and @date2
该语句没有问题。
------解决方案--------------------
set @date2 = ‘2007-20-22’
这是合法的日期吗?? 这样比较没报错??
------解决方案--------------------
第一句快,在sql执行的底层有一项对变量处理的操作,具体看sql低层执行顺序!

------解决方案--------------------
是select * from salesdetails where InvoiceDate between ‘2007-10-21’and ‘2007-10-22’这个要快一点,你可以从执行计划上面看出来,开销肯定比下面的语句小.
------解决方案--------------------
一样的。。。。。。。。。。
语句相同
如:date>=startdate and date<=enddate 时,换做between 要快
如:在时间列建clustered索引时,会更快