IOracle数据库编程调优手册.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOracle数据库编程调优手册

Oracle数据库编程调优手册 目录 前 言 4 一、ORACLE数据加载优化(SQLLoader) 4 二、UPDATE优化 4 1、对全表的Update操作 4 2、有条件的Update操作 5 3、多表连接Update操作 5 4、两张表关联Update?的三种方式 6 5、用视图代替对表的Update操作 6 三、DELETE优化 6 1、通过分拆表,避免DELETE操作 6 2、通过中间表,用INSERT代替DELETE操作 6 四、DBA级别优化提示 6 五、其它优化提示 6 前 言 本文根据最近一段时间,技术部与6.0项目组共同在做系统优化过程中,最常用的做法做一个总结。 目前只收录最近优化时的一些做法,供各项目组参考。各个项目组在实际开发过程中,如有其它优化SQL的技巧,也请提交技术部,形成技术文档,供各项目组参考。 性能优化的几个原则: 简化业务流程是提高性能的最可靠的方法------它可以给你的性能带来成倍的提升。 不要把希望寄托在DBA得身上,它不可能给你的性能带来成倍的提升。 尽量少用或者不用Update和Delete语句。 一、ORACLE数据加载优化(SQLLoader) 用于外部数据加载的表应该尽量简单,尽量不要创建主键、字段的Default值以及其它约束。这样可以充分利用Oracle数据库的直接路径加载(Direct=y)、并行加载(PARALLEL =true)提高数据加载性能。 [示 例] 用SQL Loader加载数据时使用直接路径加载(Direct Path Loads)参数 Direct=y(或者DIRECT=true),可以使用下列方法: 方法:sqlldr scott/tiger control=ldr.ctl direct=y 二、UPDATE优化 Oracle数据库中对大表(通常更新的记录数在1万条以上)进行Update操作的代价是非常高的,但是对表的INSERT、SELECT操作则相对较快。因此应该从数据库结构设计、SQL语句中尽量不使用对大表的Update操作,针对不同情况,可以参考以下几种做法: 1、对全表的Update操作 对全表的Update操作,可以先把数据Select到一个临时表中,再把被Update的表用truncate删除,然后把数据再从临时表Insert到被Update表中。例如: update ea_custacc.inv_acc set inv_acc=nvl(trim(inv_acc),1); 上述全表的Update操作可以改为下面的一系列SQL语句替代: --1.将更新后的数据Inser到临时表 CREATE TABLE inv_acc_tmp AS SELECT nvl(trim(inv_acc),1) inv_acc, mkt_code, inv_name, cert_code, inv_prop, inv_status, open_date, close_date, note FROM ea_custacct.inv_acc; --2. 清空被更新的表 TRUNCATE TABLE ea_custacct.inv_acc; --3. 将数据从临时表再Insert到被更新的表中 INSERT INTO ea_custacct.inv_acc SELECT * FROM inv_acc_tmp; COMMIT; 2、有条件的Update操作 当对大表中的部分数据,以一定的条件进行Update时,可以利用Oracle的ROWID字段,用以下方式实现有条件的Update: 将满足Update条件的记录(包含原表中的ROWID)Insert到临时表; 再根据ROWID,将未更新的记录Inser到临时表; 清空被更新的表; 将数据从临时表Insert到被更新的表; 如下,下列Update语句: UPDATE EI_SRCDATA.HA_JSMX_TEMP A SET END_FLAG = 1 WHERE A.QSBZ = 080 可以使用下列语句替换: --1. 将满足Update条件的记录(包含原表中的ROWID)Insert到临时表; CREATE TABLE HA_JSMX_TEMP_TMP AS SELECT ROWID AS ROW_ID,A.* FROM EI_SRCDATA.HA_JSMX_TEMP A WHERE A.QSBZ = 080; COMMIT; --2. 再根据ROWID,将未更新的记录Insert到临时表 INSERT IN

文档评论(0)

wangz118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档