先看如下2中SQL写法:
(1)
declare @monthstart datetime
declare @monthend datetime
declare @minID int
declare @maxID int
set @monthstart= ‘2006-06-20 17:02:00’
set @monthend= ‘2006-07-20 17:02:00’
select @minID = min(postid),@maxID = max(postId) from table_posts where postdate between @monthstart and @monthend
select @minID,@maxId
(2)
declare @minID int
declare @maxID int
select @minID = min(postid),@maxID = max(postId) from table_posts where postdate between '2006-06-20 17:02:00' and '2006-07-20 17:02:00'
select @minID,@maxID
这2条语句执行结果会有区别么?
有?回复告诉俺啥区别被。
没有。俺也这么想滴。
再描述一下俺查询滴数据量。俺查询滴那个表的数据量是近200万,不算多。
好啦,现在答案揭晓:第一条执行速度N慢,相对于第二条来说,多浪费20多秒的时间。
你别问俺为啥,俺也郁闷,至今未找到根子。不过在轻舞flash老哥的帮助下,还是找到了两者差距的所在。第一条逻辑读9万多,比第二条多9万多。汗一个。。。。
不是啥子数据库服务器的缘故,就算是俺也不知道,因为服务器不是俺设置的。
但你非得在查询条件中使用变量怎么办?牛人自有牛人的办法。还是flash老哥给的方法,贴出来共享。不过上面的问题谁碰到过可要联系俺啊。
另类解决方案闪亮登场:
declare @monthstart datetime
declare @monthend datetime
declare @minD int
declare @maxID int
declare @sqlcom varchar(8000)
set @monthstart='2006-06-20 17:02:00'
set @monthend='2006-07-20 17:02:00'
set @sqlcom='select min(postid) as minId, max(postId) as maxId from forums_posts where postdate between '''+Convert(varchar(16),@monthstart,121) +''' and '''+ Convert(varchar(16),@monthend ,121)+''''
print @sqlcom
exec(@sqlcom)
走过,路过,要记得留过。。。
鄙视看帖不回的,俺多辛苦的文章啊!
PS:
可能是表的问题,因为我在另一个表执行类似第一条那样的语句,速度很快。另一个表的字段同样有索引。
PS:
以上2种不同的语句,如果不带Min、Max函数,则他们时间上相差无几。而且读盘一样。难道是Min、Max函数搞怪?