论坛首页 Java企业应用论坛

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

浏览 77103 次
精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
作者 正文
   发表时间:2008-09-12  
你的数据库难道不能设定为“唯一”?
0 请登录后投票
   发表时间:2008-09-12  
1、用batch方式插入到表结构相同的temp表,
这个temp表可以是实体表而不是临时表
insert into my_table_temp
...


2、用以下方式插入数据
insert into my_table
select a.*
from my_table_temp a
left join my_table b on
a.pk_1 = b.pk_1
and a.pk_2 = b.pk_2
...
where b.rowid is null

0 请登录后投票
   发表时间:2008-09-12  
才几十万的数据量,加个唯一键不就解决了,怎么那么费劲,什么数据库啊??
0 请登录后投票
   发表时间:2008-09-12  
hocus 写道
做好索引,select count(*)来判断才是正道

如果是oracle,sql写做
select * from dual where exists (select * from 表名 where 条件)
这样会很快。
统计还需要出结果,上面这条语句会在找到第一条符合条件的数据时就返回。如果不出意外,时间<0.1秒。
0 请登录后投票
   发表时间:2008-09-12  
bluemeteor 写道
异常不是这么用滴!

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


的确违背异常使用的常规。但是仅就数据库操作而言,直接insert应该是一个很合理的做法。

0 请登录后投票
   发表时间:2008-09-13  
方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出
======================================================
貌似这个效率未必高啊
0 请登录后投票
   发表时间:2008-09-13  
为什么经常看到一帮人讨论不是问题的问题?
主机配置没有:1.0GHZ,256M DDR?
现状没有:慢,有多慢,现在要1秒?
要达到的目标没有:快,有多快,0.1秒?
你们列的方案有个屁用阿?

0 请登录后投票
   发表时间:2008-09-13  
抛出异常的爱 写道
tou3921 写道
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。
想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。
...........

插入一个临时表.....
之后用一个job
当有重复不动
无重复,插入并删除


这个东西很好写,比java用网络来端口通信快多了.
我以前也写过



不错的方法。不过这种方法适用于数据量渐增的模式,当一次性有大量数据insert并且需要判断有无重复时,并不是很好的方法吧?
0 请登录后投票
   发表时间:2008-09-13  
tou3921 写道
向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。
想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。
...........


这个应用的上下文太不明确了,目标表是否有主键?如果没有主键,重复的判断标准是什么?一条记录占用的最大的存储空间是多少?

再说提高效率的问题。什么才是你要的效率啊?是1min插入100条还是1s插入1000条?现在的情况是什么样?没有一个目标值,根本也就谈不上优化。如果明确给出一个目标值,你用select before insert可能已可以达到你的目标了。
0 请登录后投票
   发表时间:2008-09-14  
采用 SELECT count(*) 为最佳选择
0 请登录后投票
论坛首页 Java企业应用版

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