论坛首页 Java企业应用论坛

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

浏览 77138 次
精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2008-10-08  
bloodrate 写道
是不是必须2次访问数据库,一次询问一次插入?

大哥,你仔细看看回复总结一下,答案都已经说得很明确了。
0 请登录后投票
   发表时间:2008-11-18  
先全部插入,不要判断,然后删除重复数据
0 请登录后投票
   发表时间:2008-12-01  
正规的途径是要建INDEX的 不过 也是要根据业务去走, 如果业务不是高并发的 那么查询一次在插也是可以的 没有必要浪费INDEX空间   如果也许是高并发的 其实可以考虑做成批量任务  后台定时去刷新纪录搞一个REDO小缓存.  当然你也可以把这个逻辑交给数据库去做.但不推荐. 这样做在群集的时候可能会有麻烦.
0 请登录后投票
   发表时间:2008-12-02  
flykete 写道
设为主键,有时候违背意愿,设成unique的index,重复捕捉异常


这就违背了异常的意愿了
0 请登录后投票
   发表时间:2008-12-02  
在做设计的时候就要注意:INSERT就是INSERT,UPDATE就是UPDATE
表主键不要让用户(程序)设置,直接丢给数据库
比如ORACLE就用SEQ,MYSQL就用自增

在程序中判断,如果对象的ID为null或者是一个不合理的值(比如0),那么就INSERT。否则就UPDATE。

这样你就不会为这个问题烦恼了
0 请登录后投票
   发表时间:2008-12-02  
搂主这个需求和我的差不多(以人的基本信息为例:不能有身份证号和姓名重复的):
1,已有二千万的数据,保证库中的数据不重复(身份证号和姓名不重复).
2,批量插入(一批次一千条)
3,身份证号和姓名不是主键(可理解为逻辑上的主键)
4,目前方案为:先根据身份证号和姓名删,再插
0 请登录后投票
   发表时间:2008-12-02  
bluemeteor 写道
异常不是这么用滴!

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

正解!
0 请登录后投票
   发表时间:2008-12-02  
hocus 写道
freeman_sh 写道
如果数据库支持sequence,用sequence是最佳方案。

如果我应用有多台oracle数据库捏?
如果下一个客户不用oracle,用db2捏?


-----------------------------
我想这样弄 是不是速度更快一些?

例如数据库已经有1千条数据,

1、首先从数据库里面查询出数据 放入一个hashmap里面
2、插入数据的时候判断hashmap时候存在这个数据 不存在直接插入。

因为要是每次插入 数据都select count(*) 是不是很耗费性能。

一次查询后 就交给计算机在内存中去处理  这样要比每次查询快很多。

0 请登录后投票
   发表时间:2008-12-19  
在一个事务中先删除,再插入。微软的PetShop里是这样做的。
0 请登录后投票
   发表时间:2008-12-19  
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