MS SQLSERVER2000 优化

懒猫猫IT 2014-02-27 10:55:57
用存储过程来运行的程序。第一步重A表中循环查出2000条记录,每一条循环到B表中查询5万条数据,分别对这五万条数据进行计算并循环C表进行插入或者更新,将数据汇总后循环D表中的2000条数据进行插入或者更新。
这整段运行需要30秒的时间。怎么才能优化。
我考虑过的优化有:将第一个A表中的2000个循环省去,存储过程增加一个参数,哪个操作就执行这2000个中的某一个。
欢迎提供其他的方法。我想对B表做一个触发器,更新或者插入执行该存储过程。并且要求时间最好在3秒内。
(备注:我是用asp+mssql开发的)
...全文
199 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
frogley 2014-03-27
  • 打赏
  • 举报
回复
引用 4 楼 casney2 的回复:
[quote=引用 3 楼 frogley 的回复:] 如果可能,尽量不要用循环。 比如你的第一步:从A表中循环查出2000条记录。这里是每次查询一条,循环了2000次?除非需要递归,否则一般情况下可以一次性查询出2000条记录。
查到一条记录要根据这条深入下去查,我是用了3个游标,是嵌套的。 比如有A表B表C表 在A表中查询到aid,根据aid到B表中查询到多个bid,并对这些bid的数据进行分析处理,最后将结果插入或者更新到C表 如果一次性查出2000条数据,就是2000个aid,如何根据这些aid进行深入去查寻并且进行处理?[/quote] join 不行吗? 类似于这样: insert into C select a.id,sum(b.value) from a join b on a.id=b.id group by a.di 当然你的逻辑可能比这个复杂,但我觉得一定可以用存储过程进行批量处理,即一次性取出2000条aid所对应的bid,再一次性处理这批bid的数据,最后结果一次性的插入或更新到C表。 写SQL必须用集合论的思路来解决问题。如果一条一条的处理,那就是一般程序语言的思路,效率肯定低
懒猫猫IT 2014-03-27
  • 打赏
  • 举报
回复
引用 3 楼 frogley 的回复:
如果可能,尽量不要用循环。 比如你的第一步:从A表中循环查出2000条记录。这里是每次查询一条,循环了2000次?除非需要递归,否则一般情况下可以一次性查询出2000条记录。
查到一条记录要根据这条深入下去查,我是用了3个游标,是嵌套的。 比如有A表B表C表 在A表中查询到aid,根据aid到B表中查询到多个bid,并对这些bid的数据进行分析处理,最后将结果插入或者更新到C表 如果一次性查出2000条数据,就是2000个aid,如何根据这些aid进行深入去查寻并且进行处理?
懒猫猫IT 2014-03-17
  • 打赏
  • 举报
回复
再顶一下,不要沉
frogley 2014-03-17
  • 打赏
  • 举报
回复
如果可能,尽量不要用循环。 比如你的第一步:从A表中循环查出2000条记录。这里是每次查询一条,循环了2000次?除非需要递归,否则一般情况下可以一次性查询出2000条记录。
懒猫猫IT 2014-02-28
  • 打赏
  • 举报
回复
自己顶一下吧

8,030

社区成员

发帖
与我相关
我的任务
社区描述
高性能数据库开发
社区管理员
  • 高性能数据库开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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