PL/SQL优化
注:O代表比X 更优化的写法。
以下只是本人知道的一些基本的SQL优化,我更希望能从网友你们那里学习到更多的、更好的优化办法,提高自己的SQL编写能力。
1、尽量避免对索引列进行计算
例:
X WHERE sa*1.1>950
O WHERE sa>950/1.1
X WHERE SUBSTR(name,1,7)=’CAP’
O WHERE name LIKE ‘CAP%
2、比较值与索引列的数据类型一致
例:
emp: NUMBER型
O WHERE emp=123
X WHERE emp=’123’
emp_char:CHAR型
X WHERE emp_char=123 (此时,查询时,不利用索引列)
O WHERE emp_char=’123’
3、避免使用NULL
例:
X WHERE comm IS NOT NULL
X WHERE comm IS NULL
O WHERE comm>=0
4、对于复合索引,SQL语句必须使用主索引列
例:复合索引(deptno,job)
O WHERE deptno=20 AND job=’MANAGER’
O WHERE deptno=20
O WHERE job=’MANAGER’ AND deptno=20
X WHERE job=’MANAGER’
5、ORDER BY子句
O 子句中,列的顺序与索引列的顺序一致。
O 子句中,列应为非空列。
6、查询列与索引列次序(WHERE)一致
O SELECT empno,job FROM emp WHERE empno<100 AND job=’MANAGER’;
X SELECT empno,job FROM emp WHERE job=’MANAGER’ AND empno<100;
7、尽量少用嵌套查询
X SELECT * FROM emp WHERE empno IN (SELECT empno FROM OnWork);
O SELECT emp.* FROM emp t1,OnWork t2 WHERE t1.empno = t2.empno;
8、多表连接时,使用表的别名来引用列。
例:
X SELECT ab02.aab001,ab01.aab004
FROM ab02 ,ab01
WHERE ab02.aab001 = ab01.aab001
......
O SELECT t1.aab004,t2.aab001
FROM ab02 t1,ab01 t2
WHERE t1.aab001=t2.aab001
9、用NOT EXISTS代替NOT IN
例:
X SELECT * FROM ab01
WHERE aab001 NOT IN
(SELECT aab001 FROM ab02 WHERE aae140='3');
O SELECT * FROM ab01 t
WHERE NOT EXISTS
(SELECT 1 FROM ab02 WHERE aab001=t.aab001 AND aae140='3');
10、用多表连接代替EXISTS子句
例:
X SELECT * FROM ab01 t
WHERE EXISTS
(SELECT 1 FROM ab02 WHERE aab001=t.aab001 AND aae140=‘3’);
O SELECT t1.* FROM ab01 t1,ab02 t2
WHERE t1.aab001 = t2.aab001 AND t2.aae140=‘3’;
11、少用DISTINCT,用EXISTS代替
X SELECT DISTINCT ac01.aac016 aac016 FROM ac01,ac02
WHERE ac01.aac001=ac02.aac001
AND ac01.aab001 = '100659‘
AND NVL(ac01.aac016,'0') <> '107'
AND NVL(ac01.aac008,'0') = '1'
AND ac02.aae140 = '3' AND ac02.aac031 = '1';
O SELECT aac016 FROM ac01 t
WHERE aab001 = '100659'
AND NVL(aac016,'0') <> '107'
AND NVL(aac008,'0') = '1'
AND EXISTS (SELECT 1 FROM ac02 WHERE aac001=t.aac001
AND ac02.aae140 = '3' AND ac02.aac031 = '1');
12、使用ROWID提高检索速度
对SELECT 'Times New Roman'">得到的单行记录,需进行DELETE、UPDATE操作时,使用ROWID将会使效率大大提高。
例:SELECT rowid INTO v_rowid FROM t1
WHERE con1 FOR UPDATE OF col2;
……
……
UPDATE t1 SET col2=......
WHERE rowid=v_rowid;
13、查询的WHERE过滤原则,应使过滤记录数最多的条件放在最前面。
例:SELECT info
FROM taba a,tabb b,tabc c
WHERE a.acol between :alow and :ahigh
AND b.bcol between :blow and :bhigh
AND c.ccol between :clow and :chigh
AND a.key1 = b.key1
AND a.key2 = c.key2;
其中,A表的acol列可以最多减少查询的记录数目,其次为B表的bcol列,依次类推。
发表评论
-
Oracle plsql后台程序建议
2011-03-02 12:03 652个人改进建议: 1、游标取数时,采用批量取数的方法: ... -
oracle10g 的一个问题
2011-03-02 11:39 607oracle10g 的一个问题: 创建主键的时候, 默 ... -
Oracle视图使用
2011-02-15 17:13 0Oracle视图使用经验谈: 1、如果视图仅仅是 ... -
Oracle 10g 中的递归查询(树型查询)
2011-01-27 01:35 895Oracle 10g 中的递归查询(树型查询) 一、树型表 ... -
PLSQL 中Merge into和Update的用法
2011-01-27 01:31 1443在oracle 中有个语法:merge 用法如下: ... -
Oracle培训的总结
2011-01-27 01:30 674前段时间,因为要升级系统到Oracle环境,公司请了一位在 ... -
Oracle 培训材料
2011-01-27 01:29 607前段时间给公司做个Oracle培训,一直在学oracl ... -
Oracle 简单的SQL调优
2011-01-27 01:27 708今天刚看到一篇简单的SQL调优,自己也试了一下优化。原文如下: ... -
PL/SQL最差实践
2011-01-27 01:15 5491. 超长的PL/SQL代码 影响:可维护性,性能 ... -
大表变小表,小表再连接————记一次PL/SQL优化过程
2011-01-27 01:12 1206公司的业务系统中存在一个大的日志表,表大约是这样:cre ... -
高效的PL/SQL程序设计--批量处理
2011-01-27 00:59 593批量处理一般用在ETL操作, ETL代表提取(extract) ... -
PL/SQL用户指南与参考--PL/SQL应用程序性能调优(转)
2011-01-27 00:57 601PL/SQL应用程序性能调优 <!-- Instanc ... -
PLSQL 中Merge into和Update的用法
2011-01-18 20:42 1228这两天一直在处理关于SQL server存储过程转换到Orac ... -
Oracle SQL 内置函数大全
2009-03-25 21:25 575SQL中的单记录函数 1.ASCI ... -
PL/SQL中用光标查询多条记录
2009-03-25 21:19 710一、 什么是光标 Oracle ... -
PL/SQL开发中动态SQL的使用方法
2009-03-25 21:11 1087一般的PL/SQL程序设计中,在DML和事务控制的语句中可 ...
相关推荐
Oracle pl/SQL 优化 华为内部资料
《Oracle PL/SQL程序设计(第5版)(套装上下册)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)(套装上下册)》结构清晰,示例丰富,...
oracle_pl/sql 优化
《Oracle PL/SQL程序设计(第5版)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员...
PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...
<br>性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息...
《oracle pl/sql程序设计(第5版)》不但介绍了大量的oracle 11g的pl/sql新性能,还提供了许多优化pl/sql性能的新方法。 简单目录 《oracle pl/sql程序设计(第5版)(上册)》 (上册) 第1部分 pl/sql编程 第1章 pl/...
性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计...
这些任务——编辑、编译、纠正、测试、调试、优化和查询——都可以在不离开 PL/SQL Developer IDE 的情况下被完成。此外,PL/SQL Developer 还提供了其他几个能在每天的PL/SQL 开发中提供帮助的工具。 注册有图示,...
富士康MIS 资深人员总结的Oracle PL/Sql 性能优化心得 给新进员工学习之文档 <br>绝对精华 写出专业的Sql
本书介绍了PL / SQL的高级功能,这些功能是设计和优化数据库应用程序中PL / SQL代码所必需的。集合,外部过程,服务器端结果缓存,使用VPD强制行级安全性,处理大型对象和SecureFiles等功能为PL / SQL专业人员构建了...
2.# 优化了部份数据库监视SQL 3.* 修正了V1.0.0正式版中列表中数字列按字符排序的BUG --------------------------------------------------------------- [2009-01-22]发布 DBATools For PL/SQL Developer 1.0.0 ...
<br>性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息...
《OraclePL/SQL程序设计(第5版)》不但介绍了大量的Oracle11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《OraclePL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员、...
《Oracle PL/SQL程序设计(第5版)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员...
PL/SQL Developer超强大的oracle...PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,可以大大缩短程序员的开发周期。
《Oracle PL/SQL程序设计(第5版)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员...
PL/SQLDeveloper是一种集成的开发环境,专门用于开发、测试、调试和优化OraclePL/SQL存储程序单元,比如触发器等。PL/SQLDeveloper功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...
PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...