oracle10g数据库开发优化指南.docVIP

  1. 1、本文档共17页,可阅读全部内容。
  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文档。上传文档
查看更多
ORACLE10G数据库开发 优化指南 目录 目录 2 1:绑定变量 3 2:不要频繁提交,不要使用自动提交 5 3:索引 7 什么情况下适合建立索引: 7 如何使优化器使用索引: 8 4:高效SQL 10 查询中使用索引 10 表联结查询 11 5:常见的、流传很广的传言 13 6:临时表的使用 15 7:autotrace 16 8:收集统计信息 17 1:绑定变量 绑定变量是一个数据库开发人员所应该具备的最基本的习惯之一。 但是在现实中,很多开发人员完全不使用绑定变量,甚至根本不知道绑定变量是何物。这个很大程度上是因为他们不了解使用或者不使用绑定变量对数据库造成的影响。如果他们知道了,我敢肯定他们一定会很吃惊。 任何一句提交给ORACLE数据库运行的语句,在正式运行前,都需要通过数据库引擎的解析。解析分为2种,一种是硬解析,一种是软解析。为了理解方便,简单的说,如果你使用了绑定变量,那么数据库会倾向于使用软解析,如果你没有使用绑定变量,那么数据库会倾向于使用硬解析。 从字面上理解,硬解析使用的资源会比软解析多。但是到底有多少?很难在这个文章里面进行全面描写,但是可以从其中的一个方面进行理解:在一个SQL语句的硬解析中,会产生数百个乃至数千个LATCH,而这些LATCH锁住的都是数据库必须在实例级别串行访问的资源,并且请注意,这么多的LATCH是硬解析一句SQL语句中产生的!软解析则不需要产生这些LATCH。单从这一点就可以知道,硬解析对数据库而言是一个极其昂贵的操作。如果开发人员在一个循环里面调用了一个SQL语句而又没有绑定变量,那么可以想象对数据库会造成多大的压力! **************************************************************************** LATCH不等于锁LOCK,它是一种轻量级的LOCK,用来保证对资源的串行访问。对于被LOCK住资源的申请,如果不能满足,那么申请者会被阻塞以后进入一个等待队列等待,当资源被释放的时候,按照先到先得的顺序唤醒队列里面的第一个等待者。而对被LATCH住的资源的申请,如果不能满足,那么申请的进程不会被阻塞也不会等待,它只会在很短的一个时间以后再次重新申请。申请LATCH住资源的进程能否得到这个资源全凭运气:它们不会排队等待,而是随机的去碰运气—不停的尝试申请。 **************************************************************************** CURSOR_SHAREING参数是ORACLE提供的一个对于不使用绑定变量的解决方案,它如果设置成FORCE,可以在数据库实例上对所有提交给数据库的SQL语句强制进行绑定变量。这看来好象是对开发人员的一种解放,但是,请注意下面2点: 1:CURSOR_SHAREING会引入它自己的额外开销。 2:它有可能会引发一些与手动绑定变量不同的、不可意料的SQL执行返回结果,这增加了测试和排错的难度。 CURSOR_SHAREING绝对不是解决绑定变量的万能方法,相反,它这是ORACLE提供的一种不得已而为之的解决方案,只有当运行系统因为硬解析而不堪重负,而短期又不可能全面重写代码的情况下使用的,而且使用以前一定要经过充分严格的测试。 当然,过度绑定变量是有可能导致某个查询性能下降的,实际中也会有这样的场景。但是,相比较而言,不使用绑定变量而带来的性能问题要更普遍和严重得多。 以JAVA为例,所有提交给数据库执行的SQL语句应该如下面这样绑定变量。 { Connection con = DriverManager.getConnection (jdbc:oracle:oci:@database,scott,tiger); conn.setAutoCommit(false);//把自动提交修改为非自动提交。 String v_sql = select name from table_a where id = ? ; //嵌入绑定变量 ReparedStatement stmt = conn.prepareStatement( v_sql ); stmt.setString(1, xxxx ); //为绑定变量赋值 stmt.executeQuery(); mit(); } 所以,请开发人员特别注意:除非有充分的理由,否则,请确保你提交给数据库执行的任何一句SQL语句都是手工绑定了变量

您可能关注的文档

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档