易截截图软件、单文件、免安装、纯绿色、仅160KB

ADO.Net实现Oracle大批量数据的更新优化

在日常的业务系统应用中,大家经常会使用到大量数据的的提交(包括查询、更新或删除),假如目标数据库的数据量较大,一次需要处理的操作较多,就会出现系统执行效率低下等问题。文本中笔者以Oracle9i数据库为例,通过对ADO.Net中的数据库支持的应用实践,说明几种常见的优化处理方法,并对比其中的优劣。
  为了更详细说明情况,笔者以某业务数据填报功能为例,假设有100个用户每周需要填报某统计数量,填报明细的数据量约为200条,有专门的填报页面实现一次提交,这样一周的数据增量约为2万,一年为100多万,要保证系统有效运行6年以上,需要考虑数据存储(增、删、改)效率问题,(数据库本身的优化配置,包括表空间、索引等查询效率已经考虑,不在此讨论范畴)。这类业务的特点是,数据操作量较大,但执行的指令复杂度较低,包含简单的新增、修改、删除3类。
  传统处理方法存在的问题
  对每一个要处理的操作,直接对目标表执行对应的SQL操作(或存储过程),可使用ADO.Net的参数化SQL或通过DataSet与DataAdapter来间接处理。这样每个用户批量提交数据时,需要执行大约200次SQL操作,虽然数据库进行了优化,单次执行SQL的效率并不低,但由于一次执行的指令较多,随着目标数据容量的增加,效率会逐步降低,最终不可忍受。
  优化方法1:临时表处理模式
  对于大规模的目标数据库表,进行多次修改、删除或更新操作,效率必定较慢,要降低对目标表的操作次数,可以采用临时表的解决办法。具体方法为:建立一个与目标表结构类似的临时表(由于B/S模式的特点,临时表是基于事务的,而不是基于连接的),并增加操作模式标记字段,在执行操作前,将本次要操作的数据,就是某个用户,每周的数据(约200条左右,第一次处理时应该没有数据)一次查询转入临时表,再对临时表执行修改、更新、删除(作删除标记)操作,处理完毕后,分别将临时表的数据分三类提交到目标表。流程如下图所示:
  删除
  Delete from TARGET_TABLE Where KEY In(Select KEY
  from TEMP_TABLE Where STATE=’Delete’
  新增
  Insert Into TARGET_TABLE …
  Select … from TEMP_TABLE Where STATE=’Insert’
  修改
  Update TARGET_TABLE Set …
  Where KEY=TEMP_TABLE.KET AND TEMP_TABLE.STATE=’Update’
  实验证明,在50万数据量的条件下,此方法能比传


相关文档:

mysql与Oracle update的区别

update :单表的更新不用说了,两者一样,主要说说多表的更新
   
       Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标
               &n ......

SQLServer和Oracle的常用函数对比

SQLServer和Oracle的常用函数对比
  1.绝对值
  S:select abs(-1) value
  O:select abs(-1) value from dual
  2.取整(大)
  S:select ceiling(-1.001) value
  O:select ceil(-1.001) value from dual
  3.取整(小)
  S:select floor(-1.001) value
  O:select floor(-1.001) valu ......

sqlserver:openrowset / oracle:table/view@dblink名

只是sqlserver 提供的远程数据访问函数;  在本地sqlserver 中取外部数据源数据时候可用;
对连接本地 oracle 操作远程 oracle 不能使用; 测试: pl/sql 中使用:
select * from openrowset(................); 无效!!!!!!!!!!!!!!
在oracle 中需要访问远程数据,需要建立一连接远程oracle 的 dblink ;
再用如下方 ......

关于oracle导入sqlserver存在的唯一索引问题

我在把oracle数据导入sqlserver中时,发现在oracle中字段定义为唯一索引时,不同记录的此字段如果为空不被认为是重复的,但在sqlserver中如果此字段为唯一索引字段,不允许有2个以上的空值。郁闷。所以只好将sqlserver中的唯一索引字段手工修改为几个非空的值,但这样程序肯定要进行修改了。需要在程序中为此字段设置不重复 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号