oracle中Where子句的条件顺序对性能的影响.docVIP

oracle中Where子句的条件顺序对性能的影响.doc

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

oracle中Where子句的条件顺序对性能的影响 oracle中Where子句的条件顺序对性能的影响 oracle中Where子句的条件顺序对性能的影响 - Oracle - 网站开发-技术教程-中国素材网 经常有人问到oracle中的Where子句的条件书写顺序是否对SQL性能有影响,我的直觉是没有影响,因为如果这个顺序有影响,Oracle应该早就能够做到自动优化,但一直没有关于这方面的确凿证据。在网上查到的文章,一般认为在RBO优化器模式下无影响(10G开始,缺省为RBO优化器模式),而在CBO优化器模式下有影响,主要有两种观点: a.能使结果最少的条件放在最右边,SQL执行是按从右到左进行结果集的筛选的; b.有人试验表明,能使结果最少的条件放在最左边,SQL性能更高。 查过oracle8到11G的在线文档,关于SQL优化相关章节,没有任何文档说过where子句中的条件对SQL性能有影响,到底哪种观点是对的,没有一种确切的结论,只好自己来做实验证明。结果表明,SQL条件的执行是从右到左的,但条件的顺序对SQL性能没有影响。 实验一:证明了SQL的语法分析是从右到左的 下面的试验在9i和10G都可以得到相同的结果: 第1条语句执行不会出错,第2条语句会提示除数不能为零。 1.Select ok From Dual Where 1 / 0 = 1 And 1 = 2; 2.Select ok From Dual Where 1 = 2 And 1 / 0 = 1; 证明了SQL的语法分析是从右到左的。 实验二:证明了SQL条件的执行是从右到左的 drop table temp; create table temp( t1 varchar2(10),t2 varchar2(10)); insert into temp values(zm,abcde); insert into temp values(sz,1); insert into temp values(sz,2); commit; 1. select * from temp where to_number(t2)1 and t1=sz; 2. select * from temp where t1=sz and to_number(t2)1; 在9i上执行, 第1条语句执行不会出错,第2条语句会提示“无效的数字” 在10G上执行,两条语句都不会出错。 说明:9i上,SQL条件的执行确实是从右到左的,但是10G做了什么调整呢? 实验三:证明了在10g上SQL条件的执行是从右到左的 Create Or Replace Function F1(v_In Varchar2) Return Varchar2 Is Begin Dbms_Output.Put_Line(exec F1); Return v_In; End F1; / Create Or Replace Function F2(v_In Varchar2) Return Varchar2 Is Begin Dbms_Output.Put_Line(exec F2); Return v_In; End F2; / SQL set serverout on; SQL select 1 from dual where f1(1)=1 and f2(1)=1; 1 ---------- 1 exec F2 exec F1 SQL select 1 from dual where f2(1)=1 and f1(1)=1; 1 ---------- 1 exec F1 exec F2 结果表明,SQL条件的执行顺序是从右到左的。 那么,根据这个结果来分析,把能使结果最少的条件放在最右边,是否会减少其它条件执行时所用的记录数量,从而提高性能呢? 例如:下面的SQL条件,是否应该调整SQL条件的顺序呢? Where A.结帐id Is Not Null And A.记录状态0 And A.记帐费用=1 And (Nvl(A.实收金额, 0)Nvl(A.结帐金额, 0) Or Nvl(A.结帐金额, 0)=0) And A.病人ID=[1] And Instr([2],,||Nvl(A.主页ID,0)||,)

文档评论(0)

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

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

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档