A、B两个Oracle库,其中都有t表,tA中有580多万数据,每一条都要要经过处理后导入tB,A、B两张都是业务表,不能锁表超过1分钟,而数据处理逻辑比较复杂,只能通过客户端软件进行处理,目前的解决方案是通过分页查询,将tA中的数据一部分一部分的读出,由客户端模块处理后,再写入tB。由于tA表中没有主键,因此使用如下分页逻辑
RI=RoWID 'Oracle内置的RowID
Sql=Select * From tA Where RowID>=RI And RowNum<=1000
在获取到数据后再更新RI,设为当前数据页中的最大值这样的做法在开始的时候执行速度比较快,每次查询时间都在2秒以下,但是到了50万以后,查询时间开始不断增大,尤其是300万以后,每次查询时间都大于300秒,执行效率就很低了,由于数据读取模块必须进行线程同步,所以开1个线程和开8个线程没什么区别,现在我已经不知道该怎么办了,太慢,那位能指教一下,或者修改一下这个分页逻辑?
RI=RoWID 'Oracle内置的RowID
Sql=Select * From tA Where RowID>=RI And RowNum<=1000
在获取到数据后再更新RI,设为当前数据页中的最大值这样的做法在开始的时候执行速度比较快,每次查询时间都在2秒以下,但是到了50万以后,查询时间开始不断增大,尤其是300万以后,每次查询时间都大于300秒,执行效率就很低了,由于数据读取模块必须进行线程同步,所以开1个线程和开8个线程没什么区别,现在我已经不知道该怎么办了,太慢,那位能指教一下,或者修改一下这个分页逻辑?
解决方案 »
- ORACLE生产库到测试环境
- sqlplus登录是报错,ORA-12570: TNS: 包阅读程序失败
- 求助:关于LINUX SHELL接受存储过程OUT参数
- 高分在线等!请问管理员能跟踪到他人查询数据的记录吗?
- 推荐一个比toad,plsql developer还好用的工具
- SQL里面怎样去掉字段前后的空字符?
- 为什么创建类型实体时会报 警告:创建的类型体带有编译错误
- ROWID这样使用为何不起作用?帮忙看看,进来有分
- 急!怎么传"IN"后面的多个参数?(在线)
- ORACLE安装文件为何不能执行???
- 急!哪位高手帮忙把这个函数由SQL转为Oracle的版本
- 如何在触发器里再查找该表的数据?
sql>alter table t add tid number(15);--这个update可能比较长,可采取分段提交
sql>update t set t = rownum;sql>commit;--建索引
sql>create unique index idx_t_tid on t(tid);B库查询时,根据这一列来select * from tA where tid between :start_id and :end_id;