百万级数据oracle入库?

如何实现百万级的数据快速入库,在入库前判断对应的记录是否已经存在, 如果存在则跳过该条记录,并且实现入库序列自增。

阅读 5.3k
5 个回答

如果想速度快,有几点建议:

1、目标表所有主键和索引禁用
2、使用sqlldr导入,可以指定从序列生成值,如:SWAP_ID “SEQ_BASE_MATERIELSWAPINFO.NEXTVAL”

根据以前的测试,100万记录应该在1-2分钟内完成
导入后启用主键和索引,然后自己写个删除重复记录的语句

可以参考我以前用sqlldr的记录:sqlldr记录

其实百万级还好吧,不过这是批量操作数据,一个比较大的优化点是开启事务,不能每插入一条记录就提交一次。然后又考虑到如果所有数据都在同一个事务里完成,万一最后几条数据有点啥问题,然后之前的操作就可能回滚,所有建议比如1w条提交一次事务。这个就看作者自己控制了

分三步:

  1. 直接入库,不做判断,不生成ID

  2. 删除重复数据(记得做好索引,提高Oracle查询性能)

  3. 给剩余的数据生成ID

百万级对现在的数据库来说根本不是事,不考虑性能的情况下,单线程跑一个任务,直接插入就好了

if(!存在){
    插入
}

如果在入库的时候嫌慢,你可以分段插入,比如三百万,你可以一到一百万的数据放一起,一百万到二百万放一起,然后多进程提交,比如三百万就开三个进程。这其中有很多小技巧,比如楼上说的开事务最后提交,还有最后生成ID那个思路都挺好的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏