- 1、本文档共126页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[互联网]oracle
开发工程师: 5. 调整数据库SQL语句 ? 应用程序的执行最终将归结为数据库中的SQL 语句执行,SQL语句消耗了70%-90%的数据库资源。因此SQL 语句的执行效率最终决定了ORACLE数据库的性能。许多程序员认为查询优化是DBMS(数据库管理系统)的任务,与程序员所编写的SQL语句关系不大,这是错误的。 一个好的查询计划往往可以使程序性能提高数十倍。另外,SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低。SQL优化的主要途径是:??? 5.1、有效索引的建立。(列值重复率低) 5.1.1、在经常进行连接,但是没有指定为外键的列上建立索引; XTWZBM CGHTMXMX 测试时间: 均取第一次执行 和第二次以后三次平均时间 B-TREE BITMAP 例: 在XTWZBM表WZMC未建索引:1.07s---0.81s 在XTWZBM表WZMC建索引:0.26s---0.09s SELECT B.* FROM XTWZBM A, CGHTMXMX B WHERE A.WZBM = B.WZBM AND A.WZMC = 浮筒式液位变送器 5.1.2、在频繁进行排序的列上建立索引; 例: 在XTWZBM表WZMC未建索引:11.1s---11.1s 在XTWZBM表WZMC建索引:0.53s---0.14s SELECT A.*FROM XTWZBM AORDER BY A.WZMC 5.1.3、建议在分组的列上建立索引; 例: 在XTWZBM表WZMC未建索引:2.9s---2.5s 在XTWZBM表WZMC建索引:0.13s---0.06s SELECT A.WZMC,COUNT(*)FROM XTWZBM AGROUP BY A.WZMC 5.1.4、 IS NULL 不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列建索引也不会提高性能。 任何在where子句中使用is null的语句优化器是不允许使用索引的。 例: 时间:2.438s---2.453s SELECT T.* FROM XTWZBM T WHERE T.WZMC IS NULL 5.1.4、索引列不要加函数处理: 例:时间:0.078s---0.047s SELECT COUNT(*) FROM XTWZBM T WHERE T.GGXH = 4-72-11-6D AND T.CZ = ‘河北华瑞玻璃钢有限公司’; 时间:2.359s---2.453s SELECT COUNT(*) FROM XTWZBM T WHERE T.GGXH || T.CZ LIKE 4-72-11-6D || 河北华瑞玻璃钢有限公司; 5.2、SELECT优化 5.2.1、SELECT子句中避免使用 ‘ * ’ 当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法。不幸的是,这是一个非常低效的方法。 实际上,ORACLE在解析的过程中, 会将‘*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。 当全表查询时:时间基本相当 时间:0.141---0.125 SELECT * FROM XTWZBM; 时间:0.141---0.125 SELECT WZBM, WZMC, GGXH, CZ, JLXZ, JLDW, JLXZ2, JLDW2, XS, BC, TC, ZJBZ, SBBZ, SBBM, YHBM, RQ, ZGCB, ZDCB, CBRQ, XBZ, NOUSE, XWZBM, YHMC, BZH, YWBM FROM XTWZBM; 列数减少时 时间:0.078s---0.078s SELECT WZBM, WZMC, GGXH, CZ FROM XTWZBM; 建议尽可能列出列名 5.2.2、SELECT子句中避免使用子查询 时间:0.14s---0.125s SELECT B.*,(SELECT A.WZMC FROM XTWZBM A WHERE A.WZBM=B.WZBM)FROM CGHTMXMX B; 时间:0.125s---0.109s SELECT B.*,A.WZMC FROM XTWZBM A,CGHTMXMX B WHERE A.WZBM(+)=B.WZBM 5.2.3、COUNT(*) 、COUNT(1)对比速度差不多 时
文档评论(0)