精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-09
每次insert时还要select下,现在数据库里的数据已有几十万条,这样批量插入的时候效率就会很低,不得不这么做,谁有好的方法。 想过把关键内容取来放在map或者list里,然后每次从集合里判断,可这样内存就吃不消了。 ........... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-09-09
设为主键,重复捕捉异常
|
|
返回顶楼 | |
发表时间:2008-09-09
update,命中为0,就insert
|
|
返回顶楼 | |
发表时间:2008-09-09
设为主键,有时候违背意愿,设成unique的index,重复捕捉异常
|
|
返回顶楼 | |
发表时间:2008-09-09
异常不是这么用滴!
做好索引,select count(*)来判断才是正道 |
|
返回顶楼 | |
发表时间:2008-09-09
vvgg 写道 设为主键,重复捕捉异常
坚决反对这种用法,异常不能这么用,每次异常都会消耗系统很多资源。 方法1:就是先把数据插入一个临时表,然后通过sql找出临时表里面哪些数据在正式表里面没有,然后把这些数据插入正式表。至于怎么找没有重复的数据那就是你的事,数据库存储过程可以完成,也可以写程序一条一条的读出。 这个方法避免了每次插入都要查找一次,但不一样的数据就要插入两次。至于效率问题你可以自己慢慢调优。 方法2:写trigger,在插入之前做一个查询,如果有就抛弃,没有就插入数据 |
|
返回顶楼 | |
发表时间:2008-09-09
有索引的话单表查询还是挺快地(如果慢的话说明你DB的硬件太差了……),如果想把两次DB访问变成一次的话可以在SQL中追加begin和end,做条件判断。
|
|
返回顶楼 | |
发表时间:2008-09-09
如果数据库支持sequence,用sequence是最佳方案。
|
|
返回顶楼 | |
发表时间:2008-09-09
bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 我也同意 异常不应该被用于流程和业务逻辑判断 |
|
返回顶楼 | |
发表时间:2008-09-09
freeman_sh 写道 如果数据库支持sequence,用sequence是最佳方案。
如果我应用有多台oracle数据库捏? 如果下一个客户不用oracle,用db2捏? |
|
返回顶楼 | |