专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 高性能数据库开发

MS SQLSERVER2000 优化解决方案

发布时间:2010-05-24 21:14:09 文章来源:www.iduyao.cn 采编人员:星星草
MS SQLSERVER2000 优化
用存储过程来运行的程序。第一步重A表中循环查出2000条记录,每一条循环到B表中查询5万条数据,分别对这五万条数据进行计算并循环C表进行插入或者更新,将数据汇总后循环D表中的2000条数据进行插入或者更新。
这整段运行需要30秒的时间。怎么才能优化。
我考虑过的优化有:将第一个A表中的2000个循环省去,存储过程增加一个参数,哪个操作就执行这2000个中的某一个。
欢迎提供其他的方法。我想对B表做一个触发器,更新或者插入执行该存储过程。并且要求时间最好在3秒内。
(备注:我是用asp+mssql开发的)
------解决方案--------------------
如果可能,尽量不要用循环。

比如你的第一步:从A表中循环查出2000条记录。这里是每次查询一条,循环了2000次?除非需要递归,否则一般情况下可以一次性查询出2000条记录。
------解决方案--------------------
引用:
Quote: 引用:

如果可能,尽量不要用循环。

比如你的第一步:从A表中循环查出2000条记录。这里是每次查询一条,循环了2000次?除非需要递归,否则一般情况下可以一次性查询出2000条记录。

查到一条记录要根据这条深入下去查,我是用了3个游标,是嵌套的。
比如有A表B表C表
在A表中查询到aid,根据aid到B表中查询到多个bid,并对这些bid的数据进行分析处理,最后将结果插入或者更新到C表

如果一次性查出2000条数据,就是2000个aid,如何根据这些aid进行深入去查寻并且进行处理?

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必须用集合论的思路来解决问题。如果一条一条的处理,那就是一般程序语言的思路,效率肯定低
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: