论坛首页 Java企业应用论坛

向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率

浏览 75867 次
精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2008-09-09  
DAO
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。
想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。
...........
   发表时间:2008-09-09  
设为主键,重复捕捉异常
0 请登录后投票
   发表时间:2008-09-09  
update,命中为0,就insert
0 请登录后投票
   发表时间:2008-09-09  
设为主键,有时候违背意愿,设成unique的index,重复捕捉异常
0 请登录后投票
   发表时间:2008-09-09  
异常不是这么用滴!

做好索引,select count(*)来判断才是正道
1 请登录后投票
   发表时间:2008-09-09  
vvgg 写道
设为主键,重复捕捉异常

坚决反对这种用法,异常不能这么用,每次异常都会消耗系统很多资源。

方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。
这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。

方法2:写trigger,在插入之前做一个查询,如果有就抛弃,没有就插入数据

3 请登录后投票
   发表时间:2008-09-09  
有索引的话单表查询还是挺快地(如果慢的话说明你DB的硬件太差了……),如果想把两次DB访问变成一次的话可以在SQL中追加begin和end,做条件判断。
0 请登录后投票
   发表时间:2008-09-09  
如果数据库支持sequence,用sequence是最佳方案。
0 请登录后投票
   发表时间:2008-09-09  
bluemeteor 写道
异常不是这么用滴!

做好索引,select count(*)来判断才是正道

我也同意
异常不应该被用于流程和业务逻辑判断
0 请登录后投票
   发表时间:2008-09-09  
freeman_sh 写道
如果数据库支持sequence,用sequence是最佳方案。

如果我应用有多台oracle数据库捏?
如果下一个客户不用oracle,用db2捏?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics