小弟要把表A的数据插入到表B,因为数据量大,所以想分批进行插入。
譬如A表有数据10000万条。
偶希望实现,通过10次来完成插入工作。
就是第一次查1000万条。无错的话,然后第二次插入后1000万条。。。。
10次以后完成全部插入。
急等
---------------------------------------------------------------
偶然想到的一种方式,不妨试一下
首先找到最大最小的rowid
select min(rowid),max(rowid) from tbname ;
然后,通过结果计算差值,找到那9个点(rowid号)
最后通过rowid来检索插入,效率应该最高了
insert into tbname_new select * from where rowid between xxx and yyy;
---------------------------------------------------------------
实现方法:
//目的:80条一组 共4组
SQL> select count(*) from tt;
COUNT(*)
----------
320
已用时间: 00: 00: 00.10
SQL> select max(rowid),min(rowid) from tt;
MAX(ROWID) MIN(ROWID)
------------------ ------------------
AAAGJYAABAAAIWdAE1 AAAGJYAABAAAIWcAAA
已用时间: 00: 00: 00.20
第一个rowid:
SQL> select max(rid) from (
2 select rowid as rid from tt where rowid>='AAAGJYAABAAAIWcAAA' and rownum<=80);
MAX(RID)
------------------
AAAGJYAABAAAIWdABF
已用时间: 00: 00: 00.10
第二个。。。
SQL> select max(rid) from (
2 select rowid as rid from tt where rowid>'AAAGJYAABAAAIWdABF' and rownum<=80);
MAX(RID)
------------------
AAAGJYAABAAAIWdACV
已用时间: 00: 00: 00.10
SQL> select max(rid) from (
2 select rowid as rid from tt where rowid>'AAAGJYAABAAAIWdACV' and rownum<=80);
MAX(RID)
------------------
AAAGJYAABAAAIWdADl
已用时间: 00: 00: 00.10
SQL> select max(rid) from (
2 select rowid as rid from tt where rowid>'AAAGJYAABAAAIWdADl' and rownum<=80);
MAX(RID)
------------------
AAAGJYAABAAAIWdAE1
已用时间: 00: 00: 00.10
任意去两个连续的rowid点,看是否是80条记录。
SQL> select count(*) from tt where rowid>= 'AAAGJYAABAAAIWdACV' and rowid <'AAAGJYAABAAAIWdADl';
COUNT(*)
----------
80
已用时间: 00: 00: 00.10
SQL>
成功!