论坛首页 Java企业应用论坛

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

浏览 77105 次
精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2008-09-10  
insert ignore
查查这个
0 请登录后投票
   发表时间:2008-09-10  
按你的说法,操作比较频繁,而且表里面内容是只增不删的,肯定还是在内存里面维持一个关键字的map或者list合适,每次插入前先用程序过滤一遍,把重复的记录去掉再批量插入。
这个做法内存占用不会很大的,作为要判断是否重复的内容,肯定是类似名字或uid之类的内容,你总不可能通过比较两个很大的字符串来判断是否记录重复吧,这样的话,每条记录也就占几个字节,100万的记录也就占几兆内存而已。
需要注意的是数据同步的问题,就是怎么保证内存和数据库里面的记录是一致的,如果你能保证导入excel的操作同时只能一个用户进行的话,那就没有问题了。
0 请登录后投票
   发表时间:2008-09-10  
不用这么麻烦吧,把插入表的主键做下过滤就可以了,
insert into a
select * from b
where b.id not exists (select 'x' from b where a.id = b.id)

0 请登录后投票
   发表时间:2008-09-10  
cenwenchu 写道
update,命中为0,就insert


你还不如先delete,不管结果如何都可以insert。

种种迹象表明,delete比update快些
0 请登录后投票
   发表时间:2008-09-10  
插入的值是主键吗?
0 请登录后投票
   发表时间:2008-09-10  
bluemeteor 写道
异常不是这么用滴!

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

扯!!
楼主的情况下一定要进攻式编程, 假设不存在重复 直接插入,如果出异常表示存在重复

select count(*)方式 是防御编程不适合用在这种情况

当然还要考虑重复的比率,上面的方法适合重复比较少的情况
0 请登录后投票
   发表时间:2008-09-10  
先建Union索引,再用 insert ignore into tbl_name  VALUES (...);
自动忽略重复的数据
1 请登录后投票
   发表时间:2008-09-10  
wolfbrood 写道
vvgg 写道
hocus 写道
bluemeteor 写道
异常不是这么用滴!

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

我也同意
异常不应该被用于流程和业务逻辑判断


重复数据也可以看作一种异常吧

感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。

重复数据是一种业务逻辑,怎么是异常了。能用简单判断语句解决问题就绝不能用异常解决问题,这点道理都不明白吗?异常别滥用。

典型的教条主义 本本主义
有时候能解决问题比这些鸟理论更有实际意义
1 请登录后投票
   发表时间:2008-09-10  
xly_971223 写道
bluemeteor 写道
异常不是这么用滴!

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

扯!!
楼主的情况下一定要进攻式编程, 假设不存在重复 直接插入,如果出异常表示存在重复

select count(*)方式 是防御编程不适合用在这种情况

当然还要考虑重复的比率,上面的方法适合重复比较少的情况


一般我都是用进攻式编程。 因为先select (*)和插入数据之间有时间间隔(如果你事务是串行, 当我没有说过), 可能会导致数据重复而抛出异常。
0 请登录后投票
   发表时间:2008-09-10  
tommy402 写道
不用这么麻烦吧,把插入表的主键做下过滤就可以了,
insert into a
select * from b
where b.id not exists (select 'x' from b where a.id = b.id)


大哥,你这样子不是要用到临时表吗????
0 请登录后投票
论坛首页 Java企业应用版

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