精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-08
bloodrate 写道 是不是必须2次访问数据库,一次询问一次插入?
大哥,你仔细看看回复总结一下,答案都已经说得很明确了。 |
|
返回顶楼 | |
发表时间:2008-11-18
先全部插入,不要判断,然后删除重复数据
|
|
返回顶楼 | |
发表时间:2008-12-01
正规的途径是要建INDEX的 不过 也是要根据业务去走, 如果业务不是高并发的 那么查询一次在插也是可以的 没有必要浪费INDEX空间 如果也许是高并发的 其实可以考虑做成批量任务 后台定时去刷新纪录搞一个REDO小缓存. 当然你也可以把这个逻辑交给数据库去做.但不推荐. 这样做在群集的时候可能会有麻烦.
|
|
返回顶楼 | |
发表时间:2008-12-02
flykete 写道 设为主键,有时候违背意愿,设成unique的index,重复捕捉异常
这就违背了异常的意愿了 |
|
返回顶楼 | |
发表时间:2008-12-02
在做设计的时候就要注意:INSERT就是INSERT,UPDATE就是UPDATE
表主键不要让用户(程序)设置,直接丢给数据库 比如ORACLE就用SEQ,MYSQL就用自增 在程序中判断,如果对象的ID为null或者是一个不合理的值(比如0),那么就INSERT。否则就UPDATE。 这样你就不会为这个问题烦恼了 |
|
返回顶楼 | |
发表时间:2008-12-02
搂主这个需求和我的差不多(以人的基本信息为例:不能有身份证号和姓名重复的):
1,已有二千万的数据,保证库中的数据不重复(身份证号和姓名不重复). 2,批量插入(一批次一千条) 3,身份证号和姓名不是主键(可理解为逻辑上的主键) 4,目前方案为:先根据身份证号和姓名删,再插 |
|
返回顶楼 | |
发表时间:2008-12-02
bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 正解! |
|
返回顶楼 | |
发表时间:2008-12-02
hocus 写道 freeman_sh 写道 如果数据库支持sequence,用sequence是最佳方案。
如果我应用有多台oracle数据库捏? 如果下一个客户不用oracle,用db2捏? ----------------------------- 我想这样弄 是不是速度更快一些? 例如数据库已经有1千条数据, 1、首先从数据库里面查询出数据 放入一个hashmap里面 2、插入数据的时候判断hashmap时候存在这个数据 不存在直接插入。 因为要是每次插入 数据都select count(*) 是不是很耗费性能。 一次查询后 就交给计算机在内存中去处理 这样要比每次查询快很多。 |
|
返回顶楼 | |
发表时间:2008-12-19
在一个事务中先删除,再插入。微软的PetShop里是这样做的。
|
|
返回顶楼 | |
发表时间:2008-12-19
tommy402 写道 不用这么麻烦吧,把插入表的主键做下过滤就可以了,
insert into a select * from b where b.id not exists (select 'x' from b where a.id = b.id) 支持这种方式,利用了索引,速度还是很快的 |
|
返回顶楼 | |