- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JAVA(SQL语句的优化)
一、SQL 编写注意事项(标准)
在多在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于大量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一
般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来用索引,这有助于写出高性能的SQL语句。
改成下面:
二、SQL语句的编写原则:●选择一个好的表联接顺序(这是一个比较重要的原则)当在WHERE子句中有多个表联接时,WHERE子句中排在最后的表应当是返回行数可能最少的表,有过滤条件的子句应放在WHERE子句中的最后。如:设从emp表查到的数据比较少或该表的过滤条件比较确定,能大大缩小查询范围,则将最具有选择性部分放在WHERE子句中的最后:select?*?from?emp?e,dept?d?where?d.deptno?10?and?e.deptno?=30;?如果dept表返回的记录数较多的话,上面的查询语句会比下面的查询语句响应快得多。select?*?from?emp?e,dept?d?where?e.deptno?=30?and?d.deptno?10;
●最好不要在WHERE子句中使用函或表达式,如果要使用的话,最好统一使用相同的表达式或函数,这样便于以后使用合理的索引。SELECT?* FROM?T1 WHERE ?F1*2 = 100?改成?SELECT?*FROM?T1 WHERE F1 = 100/2●?使用WHERE?(NOT)EXISTS?来代替(NOT)IN子句,使用NOT?EXISTS?子句可以有效地利用索引。尽可能使用NOT?EXISTS来代替NOT?IN,尽管二者都使用了NOT(NOT IN不能使用索引而降低速度),NOT?EXISTS要比NOT?IN查询效率更高。例子:? SELECT?dname,?deptno?FROM?dept?WHERE?deptno?NOT?IN?(SELECT?deptno?FROM?emp);?例子:SELECT?dname,?deptno?FROM?dept?WHERE?NOT?EXISTS?(SELECT?deptno?FROM?emp?WHERE?dept.deptno?=?emp.deptno);?明显的,2要比1的执行性能好很多。因为1中对emp进行了,这是很浪费时间的操作。而且1中没有用到emp的,?因为没有where子句。而2中的语句对emp进行的是缩小范围的查询。●?通过使用=、=等,避免使用NOT命令如这个例子:select?*?from?employee?where?salary3000;?对这个查询,可以改写为不使用NOT:select?*?from?employee?where?salary3000?or?salary3000;?虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。● 外部联接 + 的用法外部联接+按其在=的左边或右边分左联接和右联接。若不带+运算符的表中的一个行不直接匹配于带+预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回。利用外部联接+,可以替代效率十分低下的?not?in?运算,大大提高运行速度。例如,下面这条命令执行起来很慢:select?a.empno?from?emp?a?where?a.empno?not?in(select?empno?from?emp1?where?job=‘SALE’); 索引倘若利用外部联接,改写命令如下:? select?a.empno?from?emp?a left join emp1?b?on?a.empno=b.empno?where?b.empno?is?null?and?b.job=‘SALE’;
例如表少,但情况复杂的时候应该写如下语句:
select a.empno AS empno,
(select emp2.address from emp2 where a.id=emp2.id) AS address
您可能关注的文档
- 韩顺平SqlHelper.java.docx
- Java基础_Java反射.doc
- java编写的登录界面连接SQL Server2008问题.doc
- JAVA与数据库.docx
- dhtmlxscheduler 动态实例(jsp+java+sql server).doc
- 从java写的存储过程转换到DB2的SQL存储过程的笔记.docx
- Jsp连接database.doc
- 使用JAVA SE 实现的人员管理系统.doc
- excel数据导入到oracle poi小例子 java.doc
- 青岛理工大学java第三次上机.doc
- 2025年医保知识考试题库:基础政策解读与医保创新试题集.docx
- 2025年医保政策解读考试题库及答案(基础法规解析).docx
- 绿色石材选材对建筑设计预算的调整分析.docx
- 2025年医保知识考试题库:医保谈判药品管理实务操作试题及解析.docx
- 绿色石材选材与建筑项目长期维护成本的关系.docx
- 2025年医保知识考试题库:医保目录解读与实务案例试题.docx
- 2025年医保知识考试题库:异地就医结算政策解读与案例分析试题.docx
- 2025年医保政策解读与宣传考试题库及答案.docx
- 数学好玩课时淘气校园:C3课网教学资源与课堂活动记录.pdf
- 2025年医保培训试题及答案.docx
原创力文档


文档评论(0)