精华帖 (8) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (8)
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-09
hocus 写道 bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 我也同意 异常不应该被用于流程和业务逻辑判断 重复数据也可以看作一种异常吧 感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。 |
|
返回顶楼 | |
发表时间:2008-09-09
vvgg 写道 hocus 写道 bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 我也同意 异常不应该被用于流程和业务逻辑判断 重复数据也可以看作一种异常吧 感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。 重复数据是一种业务逻辑,怎么是异常了。能用简单判断语句解决问题就绝不能用异常解决问题,这点道理都不明白吗?异常别滥用。 |
|
返回顶楼 | |
发表时间:2008-09-09
vvgg 写道 hocus 写道 bluemeteor 写道 异常不是这么用滴!
做好索引,select count(*)来判断才是正道 我也同意 异常不应该被用于流程和业务逻辑判断 重复数据也可以看作一种异常吧 感觉有重复数据的几率远小于正常的几率,所以产生异常的代价和每次查询相比应该算小的。 重复数据是否看做异常状态,完全取决与业务 |
|
返回顶楼 | |
发表时间:2008-09-09
我觉得得取决于你的重复的概率有多大,如果概率非常小的话,建议用异常来处理,如果比较大的话还是采取查询后再插入
|
|
返回顶楼 | |
发表时间:2008-09-09
Oracle自带的 merge into 语句,不知道是否符合楼主的要求。
|
|
返回顶楼 | |
发表时间:2008-09-09
先select进行判断,再进行insert,串行化事务,效率怎样没试过。
|
|
返回顶楼 | |
发表时间:2008-09-09
根据你insert的频率和一次性insert的数据量来判断:如果频率不快(比如一天一次),可以采取先select再insert,如果数据量大的话,可以select的时候拼in来批量取。如果频率很快的话,建议还是把关键字保存在内存或memcached中吧,几十万条的数据量应该不大吧,主要的关键字放在内存中应该不会有问题吧(假设一个key占100b(很大了吧),100w个key也只有不到100M啊)。
|
|
返回顶楼 | |
发表时间:2008-09-10
MeteorX 写道 Oracle自带的 merge into 语句,不知道是否符合楼主的要求。
merge into肯定不行,比如注册用户时,岂不是要update掉之前的用户? |
|
返回顶楼 | |
发表时间:2008-09-10
说了太多废话
1.先select,再insert,消耗多少时间? 2.先insert,判断异常,消耗多少时间? 如果重复的键上有索引,开销多少时间? 之所以重复,就是说明这些字段上需要有唯一性,已经是业务含义的主键了,建立索引是理所应当的。 没数据,莫空谈 最好先在表中插入100万条记录,写个程序,测试下。半天就肯定搞定了 |
|
返回顶楼 | |
发表时间:2008-09-10
前段时间我们的一个项目,经常需要一次导入10-50w的数据,我们的解决办法是:
1.对数据建立唯一索引 2.将数据转换为csv/text文件格式 3.通过java 调用sqlloader直接导入 性能基本上能满足我们的要求,该解决方法缺点: 1.需要在应用服务器端安装ORACLE CLIENT |
|
返回顶楼 | |