- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OracleSQL最佳实践
Oracle SQL最佳实践
? ?1.用EXISTS代替DISTINCT,消除sort operation 2.如果在GROUP BY中过滤数据,在WHERE从句中指定条件比在HAVING从句中有更好的性能,因为在GROUP之前已经过滤掉数据,因此更少的行被汇总 3.UNION会对两个SELECT语句的结果集执行一个SORT,并消除重复行,成本会昂贵,而UNION ALL则不会。因此如果应用能够处理重复,或者确信没有重复记录,那么考虑使用UNION ALL代替UNION 4.能不用UNION就不要用它 5.为了避免在一个SQL语句中混合使用LEFT JOIN和RIGHT JOIN产生混淆,应该使用一个一致的视野,例如外连接只使用FULL or LEFT OUTER JOIN,忽略掉RIGHT OUTER JOIN? ? 6.SQL被Oracle执行之前需要被解析。无论一个给定的SQL语句被执行多少次,它仅仅需要一次解析。在解析期间,下面的步骤被执行(不考虑顺序): (1)SQL语句语法被验证 (2)数据字典被搜索用以验证表和列的定义 (3)数据字典被搜索用以验证在相关对象上的安全权限 (4)相关对象上会获得解析锁 (5)决定最佳的执行计划 (6)语句被加载到SGA系统全局区中的共享池内的共享SQL区(也叫library cache库高速缓存区)。这个执行计划和解析信息被保存在这里,以防止相同的语句被再次执行 一条SQL语句被解析的条件是,仅仅如果Oracle不能在SGA的共享SQL区中找到同样的SQL语句。 在解析一条SQL语句之前,Oracle在库高速缓存中搜索相同的SQL语句。如果找到了确切的匹配,则不再需要解析这条语句。然而如果相同的SQL语句没有被找到,那么Oracle会执行上面所述的步骤去解析这条语句。 为了成为相同的SQL语句,必须满足下述条件: (1)有相同的大小写字符 (2)有相同的空格和换行 (3)使用相同的名字引用相同的对象,必须有相同的owner所有者 如果应用可能多次执行相同的或相似的SQL语句,尽一切办法尝试避免不必要的解析。这样将会提高应用的所有性能。减少SQL解析的两种技术: (1)使用绑定变量 (2)使用表别名 6.1使用绑定变量 当多用户使用一个应用的时候,会经常反复的执行相同的SQL语句集合,但是会使用不同的数值。例如,一个客户代表经常执行下面语句: Sql代码 SELECT * FROM customer WHERE cust_nbr = 121; SELECT * FROM customer WHERE cust_nbr = 121; 而另一个客户代表将会执行: Sql代码 SELECT * FROM customer WHERE cust_nbr = 328; SELECT * FROM customer WHERE cust_nbr = 328; 这两条SQL语句相似,但是不相同,因为cust_nbr的号不同,因此Oracle必须解析两次。可以使用绑定变量重写应用。这样的话,有问题的SQL语句可以改写为: Sql代码 SELECT * FROM customer WHERE cust_nbr = :x; SELECT * FROM customer WHERE cust_nbr = :x; Oracle仅仅需要解析一次语句了。多用户并发执行的程序在同时提供不同的cust_nbr的时候,能够共享这条SQL语句相同的拷贝,减少不必要的解析。 6.2使用表别名 表别名的使用能够帮助提升SQL语句的性能,提供了方便的简化符号,是查询更可读,简明,表别名的长度最大能到30个字符 容易犯的错误是在写hint的时候忘记使用表别名,这样的话这些hint将被静态忽略掉 一旦定义了别名,在查询语句的任何地方以及任何的hint都必须指定别名,而不是真实的表名。 这里阐述使用表别名如何影响性能,如下查询: Sql代码 SELECT c.cust_nbr, name, order_nbr FROM customer c, cust_order o WHERE c.cust_nbr = o.cust_nbr; SELECT c.cust_nbr, name, order_nbr FROM customer c, cust_order o WHERE c.cust_nbr = o.cust_nbr; 因为name列只在custome
您可能关注的文档
最近下载
- 中国吞咽障碍评估与治疗专家共识(2017年版)第一部分+评估篇.pdf
- 22G101 三维彩色立体图集.docx VIP
- 汽车维护与保养汽车维护与保养概述课件.pptx VIP
- 人教版部编道德与法治六年级上册全册课件【最新】.pptx
- 《结直肠癌》课件.ppt VIP
- 《AIGC应用实战:写作、绘图、视频制作、直播》课件 第七章 即梦的使用方法.pptx VIP
- 人教版高中物理必修第三册精品课件 第10章 静电场中的能量 5.带电粒子在电场中的运动.ppt VIP
- 长城汽车招聘测评题.pdf
- 办理食品经营许可证操作流程图.pdf VIP
- 2025浙江杭州市能源集团有限公司招聘6人笔试参考题库附带答案详解.docx
文档评论(0)