oracle知识

注意事项:
正常情况下resultset是指针,指向数据库的数据,本身是不存储数据库的数据的,默认情况下就算是提交的sql能查询处上亿条的数据也是不消耗内存的,但是如果用的是可滚动结果集的resultset情况就不一样了,oracle 是不支持可滚动结果集的,那么我们用jdbc得到一个可滚动的结果集就是由jdbc自己支持的,也就是说结果集是要存放在内存中的,所以在海量数据的情况下也就是要消耗大量内存的,因此造成内存溢出也就是正常的了,所以如果是海量数据的话就不要用可滚动结果集就可以了、

PreparedStatement sta = con.prepareStatement(
    				baseSql,
                    ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY,
                    ResultSet.CLOSE_CURSORS_AT_COMMIT);

需要设置游标为.TYPE_FORWARD_ONLY,

如果没有索引,所以update会锁表,如果加了索引,就会锁行.

对于update WIND.TB_OBJECT_6499 set F3_6499=‘829002005’ where F3_6499=‘829002006’
可以拆为

  1. SELECT * FROM WIND.TB_OBJECT_6499 where F3_6499=‘829002006’
  2. update WIND.TB_OBJECT_6499 set F3_6499=‘829002005’ where OB_OBJECT_ID=?
    优势:
    Id为索引,所以不会导致锁表,且查找速度增快

当时的方案有:
先排序,再少量更新
百度数据库分批取数据
主键是uuid

Select 时间过长会导致快照过期

分页查询
select * from (select t.*,rownum rn from CLEAR_01 t) nn where nn.rn>9 and nn.rn<101;
注:select * from CLEAR rownum>99 and rownum<101是错误的,oracle会认为条件不成立

优化:
1.若字段超长可以使用md5值转换
2.去重使用HashMap或者HashSet,千万不能使用arraylist速度效率极差
3.hashmap的value有多个值可以使用“_”拼接,最后分割取值
4.HashMap初始化时最好进行容量估计
5.调用外部服务时,时间会过长,出现异常
(java.sql.SQLException: ORA-01555: 快照过旧: 回退段号 28 (名称为 “_SYSSMU28_2785155593$”) 过小)
具体分开操作,先写入本地,再进行服务调用。

oracle表取出单表重复数据速度:
1800万的数量 时间大概是3分钟+程序启动1分钟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值