精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-12
你的数据库难道不能设定为“唯一”?
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2008-09-12
才几十万的数据量,加个唯一键不就解决了,怎么那么费劲,什么数据库啊??
|
|
返回顶楼 | |
发表时间:2008-09-12
hocus 写道 做好索引,select count(*)来判断才是正道
如果是oracle,sql写做 select * from dual where exists (select * from 表名 where 条件) 这样会很快。 统计还需要出结果,上面这条语句会在找到第一条符合条件的数据时就返回。如果不出意外,时间<0.1秒。 |
|
返回顶楼 | |
发表时间:2008-09-12
bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 的确违背异常使用的常规。但是仅就数据库操作而言,直接insert应该是一个很合理的做法。 |
|
返回顶楼 | |
发表时间:2008-09-13
方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出
====================================================== 貌似这个效率未必高啊 |
|
返回顶楼 | |
发表时间:2008-09-13
为什么经常看到一帮人讨论不是问题的问题?
主机配置没有:1.0GHZ,256M DDR? 现状没有:慢,有多慢,现在要1秒? 要达到的目标没有:快,有多快,0.1秒? 你们列的方案有个屁用阿? |
|
返回顶楼 | |
发表时间:2008-09-13
抛出异常的爱 写道 tou3921 写道 向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。 想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。 ........... 插入一个临时表..... 之后用一个job 当有重复不动 无重复,插入并删除 这个东西很好写,比java用网络来端口通信快多了. 我以前也写过 不错的方法。不过这种方法适用于数据量渐增的模式,当一次性有大量数据insert并且需要判断有无重复时,并不是很好的方法吧? |
|
返回顶楼 | |
发表时间:2008-09-13
tou3921 写道 向大数据数据库中插入值时,还要判断插入是否重复,然后插入。如何提高效率。
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。 想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。 ........... 这个应用的上下文太不明确了,目标表是否有主键?如果没有主键,重复的判断标准是什么?一条记录占用的最大的存储空间是多少? 再说提高效率的问题。什么才是你要的效率啊?是1min插入100条还是1s插入1000条?现在的情况是什么样?没有一个目标值,根本也就谈不上优化。如果明确给出一个目标值,你用select before insert可能已可以达到你的目标了。 |
|
返回顶楼 | |
发表时间:2008-09-14
采用 SELECT count(*) 为最佳选择
|
|
返回顶楼 | |