如何优化union连接起来的多个sql语句?

亚细亚 2009-05-13 03:05:42
asp连接数据库语句,感觉速度比较慢,代码如下,请问怎么能够优化一下?

for x=1 to 7
otherDay=date()+x
sql=sql&" select id,curordercode,curownername,firstcheckdate,dbo.getPrvCheckDate(ID,'"&otherDay&"') as PrvCheckDate from BaseInfo_t where DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0"
sql=sql&" union"
next
sql=mid(sql,1,len(sql)-5)

...全文
416 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
等不到来世 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Haiwer 的回复:]
关键不在union
而是DateDiff
DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0
改成
FirstCheckDate>='"&otherDay&"' and FirstCheckDate <dateadd(day,1,'"&otherDay&"')
[/Quote]
The two conditions seem not equal.

这个条件才和原条件等价:
where FirstCheckDate<convert(char(10),dateadd(d,1,otherday),120)
亚细亚 2009-05-13
  • 打赏
  • 举报
回复
哈哈,谢谢大家的回复,结贴
jinjazz 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yaxiya 的回复:]
引用 7 楼 jinjazz 的回复:
union all的速度比union 快很多倍

如果不更改DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0 的话,我发现union all 与union的速度差不多!
[/Quote]

数据量越大差距越明显
亚细亚 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jinjazz 的回复:]
union all的速度比union 快很多倍
[/Quote]
如果不更改DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0 的话,我发现union all 与union的速度差不多!
王向飞 2009-05-13
  • 打赏
  • 举报
回复
学习
jinjazz 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yaxiya 的回复:]
引用 3 楼 Haiwer 的回复:
关键不在union
而是DateDiff
DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0
改成
FirstCheckDate>='"&otherDay&"' and FirstCheckDate <dateadd(day,1,'"&otherDay&"')


按照您的方法改了后,查询速度确实快了。为什么这样改后,速度就快了?
[/Quote]

等号左边不要用函数,这个会让索引失效。
jinjazz 2009-05-13
  • 打赏
  • 举报
回复
union all的速度比union 快很多倍
亚细亚 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 meheartfly 的回复:]
这还用说,DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0还得先进行计算!
[/Quote]
这样说来,这个函数应该在什么场合下用比较合适?
meheartfly 2009-05-13
  • 打赏
  • 举报
回复
这还用说,DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0还得先进行计算!
亚细亚 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Haiwer 的回复:]
关键不在union
而是DateDiff
DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0
改成
FirstCheckDate>='"&otherDay&"' and FirstCheckDate <dateadd(day,1,'"&otherDay&"')

[/Quote]
按照您的方法改了后,查询速度确实快了。为什么这样改后,速度就快了?
昵称被占用了 2009-05-13
  • 打赏
  • 举报
回复
关键不在union
而是DateDiff
DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0
改成
FirstCheckDate>='"&otherDay&"' and FirstCheckDate<dateadd(day,1,'"&otherDay&"')
lgx0914 2009-05-13
  • 打赏
  • 举报
回复
dbo.getPrvCheckDate?
meheartfly 2009-05-13
  • 打赏
  • 举报
回复
把where DateDiff(day,FirstCheckDate,'"&otherDay&"')>=0条件用or连接起来就可以了
不要用union

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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