提问:
现在小弟有一存储过程,跑数据的时候是3K/M,但是性能还是不能满足业务需求,需要优化,麻烦大大。处理过程大致如下:(a,b,c,d表中的数据都是主键直接查询得出)open cur fetch cur获取a表数据获取b表数据获取c表数据获取d表数据游标数据,a,b,c,d表写入自己定义的recordinsert 目标表commit
还有。。在cur的SQL语句中使用decode 或者||会不会影响效率。
跪谢!
现在小弟有一存储过程,跑数据的时候是3K/M,但是性能还是不能满足业务需求,需要优化,麻烦大大。处理过程大致如下:(a,b,c,d表中的数据都是主键直接查询得出)open cur fetch cur获取a表数据获取b表数据获取c表数据获取d表数据游标数据,a,b,c,d表写入自己定义的recordinsert 目标表commit
还有。。在cur的SQL语句中使用decode 或者||会不会影响效率。
跪谢!
解决方案 »
- oracle 中占用大量cpu的进程都是i/o slave wait
- 求一段sql语句,列转行的.ORACLE下的
- 大设计大实现
- 请教 oracle多表查询随机一行~~
- 高手来看看是什么错误
- 求一条查询语句
- 关于表空间的问题
- 我的ORACLE是默认安装的,请问要怎样配置才能让一台没有装ORACLE的机子使用我机子上的ORACLE数据库呀??
- delete与truncate的区别?
- 请大家访问我的个人站点--Delphi桃花岛,绝对值得去一趟,有数据库辅助设计Case工具(支持Oracle)以及数据库资料
- 请教如何同时UPDATE单张表中的两个字段
- plsql中 可以 使用 with 嗎???????????????????????????????????????
把你的详细需求以及处理数据量帖出来看看,能不能用sql直接完成.
2.把cursor的记录分了组,每一组commit一次--要分析瓶颈是否在回滚段上。
适当是选择多少?我现在是每1K条commit一次。。感觉速度没什么变化是否要改再取小一点??
感谢Allan_xd 。现在 我在对每个表的操作前都加了insert into tmp values (p_taskcode,'XX',systimestamp);来观察去各个表数据的大概时间,发现对某个表的操作比其他表操作耗时,多了一个数量级的时间,但是呢对这些表的访问都是用主键的这样怎么办?
abcd四个表没有任何关联?
那插入目标表的规则呢?
如果这样的话是一个相当复杂的SQL如果改成这种方案能大幅提高效率?直接insert XXXselect XX....XX from ...where ....................是这样吗?如果是这种方案的话,如果出现异常如何处理?
那就说 游标中的数据先写入表中,然后再4表关联更新目标表??update不是更慢了?
插入,再插入之前是需要取abcd4个表中的数据谢谢
假设你的游标里有10000条数据,那么要完成整个循环,就要执行40000次检索,10000次插入,10000次游标的递归调用,10000次提交,光是sql引擎的切换就耗费大量时间。至于异常处理,你在循环内可以作的,在循环外也是可以的,比如使用DBMS_ERRLOG的功能。如果可以,可以把你代码贴出来,这样可以更直观一些,别人调整起来也更有针对性。