JAVA(SQL语句的优化)

JAVA(SQL语句的优化)

ID:37921611

大小:104.50 KB

页数:10页

时间:2019-06-02

JAVA(SQL语句的优化)_第1页
JAVA(SQL语句的优化)_第2页
JAVA(SQL语句的优化)_第3页
JAVA(SQL语句的优化)_第4页
JAVA(SQL语句的优化)_第5页
资源描述:

《JAVA(SQL语句的优化)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、SQL编写注意事项(标准)在多在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于大量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性。在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是,如果在SQL语句的

2、where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来使用索引,这有助于写出高性能的SQL语句。改成下面:10二、SQL语句的编写原则:●选择一个好的表联接顺序(这是一个比较重要的原则)当在WHERE子句中有多个表联接时,WHERE子句中排在最后的表应当是返回行数可能最少的表,有过滤条件的子句应放在WHERE子句中的最后。如:设从emp表查到的数据比较少或该表的过滤条件比较确定,能大大缩小查询范围,则将最具有选择性部分放在WHERE子句中的最后:select *

3、 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 T1WHERE F1*2=100 改成 SELECT *FROM T1WHEREF1=100/2● 使用WHERE 

4、(NOT)EXISTS 来代替(NOT)IN子句,使用NOT EXISTS 子句可以有效地利用索引。尽可能使用NOT EXISTS来代替NOT IN,尽管二者都使用了NOT(但NOTIN不能使用索引而降低速度),NOT EXISTS要比NOT IN查询效率更高。例子1: 10SELECT dname, deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp); 例子2:SELECT dname, deptno FROM dept WHERE NOT EXISTS (SELECT deptno FROM emp 

5、WHERE dept.deptno = emp.deptno); 明显的,2要比1的执行性能好很多。因为1中对emp进行了全表扫描,这是很浪费时间的操作。而且1中没有用到emp的索引, 因为没有where子句。而2中的语句对emp进行的是缩小范围的查询。● 通过使用>=、<=等,避免使用NOT命令如这个例子:select * from employee where salary<>3000; 对这个查询,可以改写为不使用NOT:select * from employee where salary<3000 or salary>3000; 虽然这两种查询的结果一样,但是第二种

6、查询方案会比第一种查询方案更快些。第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。●外部联接+的用法外部联接+按其在=的左边或右边分左联接和右联接。若不带+运算符的表中的一个行不直接匹配于带+预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回。利用外部联接+,可以替代效率十分低下的 not in 运算,大大提高运行速度。例如,下面这条命令执行起来很慢:select a.empno from emp a where a.empno not in(select empno from emp1 where job=‘SALE’);索引倘

7、若利用外部联接,改写命令如下: select a.empno from emp aleftjoinemp1 b on a.empno=b.empno where b.empno is null and b.job=‘SALE’;例如表少,但情况复杂的时候应该写如下语句:selecta.empnoASempno,(selectemp2.addressfromemp2wherea.id=emp2.id)ASaddress,(selectemp3.address1fromemp3whereb.id=emp3.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。