求助:关于使用between日期 and 日期 的效率问题

kid_1982 2007-10-24 09:29:31
在对一段时间内数据进行选择时,同样使用“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
...全文
753 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
StandALoneComplex 2007-10-25
  • 打赏
  • 举报
回复
对变量的处理虽然要额外耗时,但对于这么简单的语句,这个时间差不是人能够感觉到的,如果楼主感觉差异明显的话,应该不只是这个原因.
zg182 2007-10-25
  • 打赏
  • 举报
回复
是select * from salesdetails where InvoiceDate between ‘2007-10-21’and ‘2007-10-22’这个要快一点,你可以从执行计划上面看出来,开销肯定比下面的语句小.
中国风 2007-10-25
  • 打赏
  • 举报
回复
一样的。。。。。。。。。。
语句相同
如:date>=startdate and date<=enddate 时,换做between 要快
如:在时间列建clustered索引时,会更快
xiangyu120 2007-10-24
  • 打赏
  • 举报
回复
第一句快,在sql执行的底层有一项对变量处理的操作,具体看sql低层执行顺序!
StandALoneComplex 2007-10-24
  • 打赏
  • 举报
回复
set @date2 = ‘2007-20-22’
这是合法的日期吗?? 这样比较没报错??
FAFA_2007 2007-10-24
  • 打赏
  • 举报
回复
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
该语句没有问题。
sunhonglei2004 2007-10-24
  • 打赏
  • 举报
回复
declare @date1 as datetime,@date2 as datetime
set @date1 = ‘2007-10-21’
set @date2 = ‘2007-20-22’
这种写法好象不对吧,两个变量全为datetime类型,一赋值成字符串了
boblaw 2007-10-24
  • 打赏
  • 举报
回复
效率上決不會有區別的
xabre168 2007-10-24
  • 打赏
  • 举报
回复
这样查出来的应该只是10-21号的记录。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧