一个insert的问题,大侠指教,在线等,急!

小弟要把表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>

成功!

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus