SQL语句的调优.docVIP

  1. 1、本文档共4页,可阅读全部内容。
  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文档。上传文档
查看更多
1. ?说明 数据SQL执行的效率,我们在编写SQL语句应该遵循一定的优化规则,使代码风格统一、规范。充分利用表索引,避免 2. ?调优方法 1) ?相同功能、性能的SQL ORACLE采用共享内存SGA的机制,因此ORACLE会SQL进行分析,并且占用共享内存;如果ORACLE只分析一次,遇到相同SQL,会直接从共享内存中;这样便能减少共享池的开销以及代码的复用。 处理方法:保证书写格式相同,包括大小写,空格位置,表SQL语句作为公共函数由其它函数调用的方式使用。 2 ) ?动态SQL:SQL采用 3) ?连接方式与表名顺序 多表ORACLE的解析器按照从右到左的FROM子句中的表名;因此写在最后的那,扫描FROM子句中最右的那个表,并,然后FROM子句中最后第二个表,最后将所有从第二个表中适 4) ?查询条件顺序 ORACLE采用自下而上的WHERE子句,根据,表之WHERE条件之前, 那些可以WHERE子句的末尾。 5) ? (1) ?SELECT子句中避免使用 * 使用* ,Oracle便会 (2) ?使用表的(Alias) 多表 6) ?函数和表达式 (1) ?用=替代 例如:DEPTNO上有一个索引, 高效:?SELECT * FROM EMP WHERE DEPTNO =4 低效:SELECT * FROM EMP WHERE DEPTNO 3 ???两者的区别在于,前者DBMS将直接跳到第一个DEPT等于4的DEPTNO=3的DEPT大于3的. (2) ?使用DECODE函数来减少处理时间 使用DECODE函数可以避免重. (3) ?用TRUNCATE替代DELETE 当,在通常情况下, 回(rollback segments ) 用来存放可以被恢. 如果你没有COMMIT事ORACLE会将数据恢(准确地) ,而当运用TRUNCATE 回.当命令运行后,数据不能被恢?TRUNCATE只在删除全表或分区适用,TRUNCATE是DDL不是DML 7) ?常用 (1)?用EXISTS替代IN 用IN将启用全表EXISTS将利用索引,提高 (2) ?用NOT EXISTS替代NOT IN 用NOT IN将启用全表NOT EXISTS将利用索引,提高 (3) ?用表EXISTS (4) ?用EXISTS替DISTINCT (5) ?避免在索引列上使用IS NULL和IS NOT NULL 如果索引包含任何可以ORACLE将无法使用 低效 (索引失效) : SELECT * FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL; 高效(索引有效) : SELECT * FROM DEPARTMENT WHERE DEPT_CODE =0; (6) ?用UNION-ALL 替UNION 当SQLUNION两个UNION-ALL的方式被合并,然后在 如果用UNION ALL替代UNION, (7) ?用UNION替OR (适用于索引列) 通常情况下,用UNION替WHERE子句中的OR将会起到对索引列使用OR将造成全表column没有被索引,OR而降低。 (8) ?用WHERE替代ORDER BY ORDER BY 子句只在两种严格的条件下使用索引: ORDER BY中所有的列必ORDER BY中所有的列必 WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列. (9) ?用WHERE子句替换HAVING子句 避免使用HAVING子句,HAVING 只会在WHERE子句限制: ??低效: ??SELECT REGION,AVG(LOG_SIZE) ???FROM LOCATION ???GROUP BY REGION ????HAVING REGION REGION != SYDNEY???AND REGION != PERTH ????高效 ????SELECT REGION,AVG(LOG_SIZE) ????FROM LOCATION ????WHERE REGION REGION != SYDNEY ????AND REGION != PERTH ????GROUP BY REGION ?HAVING 中的条件一般用于COUNT() 等等。除此之外,一般的条件WHERE子句中。 (10) ?GROUP BY的使用 提高GROUP BY 语句的效率,可以通过将不需要的记录在GROUP BY 之前 (11) ?全局参数 8) ?其它因素 (1) ?减少 当SQL语句时,ORACLE在内部: 解析SQL(( 估算索引的利用率(( 绑定变量(( 读数据块等等(( 由此可见, 减少 , 就能ORACLE的工作量。 (2) ?常使用COMMIT 只要有可能,在程序中尽量多使用C

文档评论(0)

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

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

1亿VIP精品文档

相关文档