首页 新闻 会员 周边

sql service2008关于怎么提高存储过程运行效率的方案

0
悬赏园豆:20 [已解决问题] 解决于 2018-07-17 13:07

有多个表A,B,C,D,E

现在要把A的数据通过存储过程保存或跟新到B,C里,

A中有几个字段需要根据表D,E来比对后转化成相应的数据,再插入B,C,

现在用的方案是浮标:

每次定位一行,给变量做初始化,根据A中一些字段取D,E中的数据,

通过insert或update把A中的和对比取到D,E中的数据插入到B,C表,

但是速度感人,1W数据要4分钟,太慢了。

------

目前想到的方案是在表A再加几个字段存储根据表D,E来比对后转化的数据,

然后一口气insert和update到B,C表中,

这个方案会提高效率吗?

或者还有什么方案?

求大佬解答。

Anmen的主页 Anmen | 初学一级 | 园豆:70
提问于:2018-07-05 16:03
< >
分享
最佳答案
0

这其中的关键是 你是否可以一次性的 从A表中加工出你 要插入B和C的数据。

如果能异常加工(查询)出来,完全可以1次或2次查询完成,而不需要cursor方式。

如果不能,你只能采取逐行处理A的方式。

------------

另外,不一定非得用cursor,凡是能循环处理的方法都是可行的。没准你通过内存表、或临时表可以获得更高的效率

------------

还有,可以考虑后台异步作业处理的方式,你就不需要主动调用这个处理的存储过程了

收获园豆:15
jinzhenshui | 菜鸟二级 |园豆:383 | 2018-07-06 09:21

公用表表达式能完成这个功能吗?网上找到的都是查询,而且只能被一句引用,用递归的话也是一条条来,上限100次递归。。。感觉不靠谱啊。。。

---

临时表或表变量能拯救吗?

Anmen | 园豆:70 (初学一级) | 2018-07-06 10:22
其他回答(1)
0

"A中有几个字段需要根据表D,E来比对后转化成相应的数据",速度的瓶颈应该在这儿。

收获园豆:5
西漠以西 | 园豆:1675 (小虾三级) | 2018-07-07 10:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册