`
lxf3339
  • 浏览: 58810 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

PL/SQL优化

阅读更多

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 pl/SQL 优化 华为

    Oracle pl/SQL 优化 华为内部资料

    Oracle PL/SQL程序设计(第5版)(套装上下册)

    《Oracle PL/SQL程序设计(第5版)(套装上下册)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。  《Oracle PL/SQL程序设计(第5版)(套装上下册)》结构清晰,示例丰富,...

    oracle_pl/sql 优化

    oracle_pl/sql 优化

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    《Oracle PL/SQL程序设计(第5版)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员...

    PL/SQL Developer V7.1.4

    PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...

    PL/SQL Developer 6.05注册版-1

    &lt;br&gt;性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息...

    Oracle PL SQL程序设计 上 第五版(代码示例)

    《oracle pl/sql程序设计(第5版)》不但介绍了大量的oracle 11g的pl/sql新性能,还提供了许多优化pl/sql性能的新方法。 简单目录 《oracle pl/sql程序设计(第5版)(上册)》 (上册) 第1部分 pl/sql编程 第1章 pl/...

    PL/SQL Developer v8.0.zip

    性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计...

    PL/SQL Developer 9.0.4.1644 绿色中文版_带注册机

    这些任务——编辑、编译、纠正、测试、调试、优化和查询——都可以在不离开 PL/SQL Developer IDE 的情况下被完成。此外,PL/SQL Developer 还提供了其他几个能在每天的PL/SQL 开发中提供帮助的工具。 注册有图示,...

    Oracle Sql Pl/Sql 性能优化 精华

    富士康MIS 资深人员总结的Oracle PL/Sql 性能优化心得 给新进员工学习之文档 &lt;br&gt;绝对精华 写出专业的Sql

    Oracle Advanced PL/SQL Developer Professional Guide

    本书介绍了PL / SQL的高级功能,这些功能是设计和优化数据库应用程序中PL / SQL代码所必需的。集合,外部过程,服务器端结果缓存,使用VPD强制行级安全性,处理大型对象和SecureFiles等功能为PL / SQL专业人员构建了...

    DBATools For PL/SQL Developer

    2.# 优化了部份数据库监视SQL 3.* 修正了V1.0.0正式版中列表中数字列按字符排序的BUG --------------------------------------------------------------- [2009-01-22]发布 DBATools For PL/SQL Developer 1.0.0 ...

    PL/SQL Developer 7.1.5 注册版-3

    &lt;br&gt;性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息...

    Oracle PL/SQL程序设计(第5版)

    《OraclePL/SQL程序设计(第5版)》不但介绍了大量的Oracle11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《OraclePL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员、...

    Oracle PL/SQL程序设计(第5版)(上下册)

    《Oracle PL/SQL程序设计(第5版)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员...

    PL/SQL Developer

    PL/SQL Developer超强大的oracle...PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,可以大大缩短程序员的开发周期。

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    《Oracle PL/SQL程序设计(第5版)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)》结构清晰,示例丰富,实践性强,适用于Oracle数据库开发人员...

    PL/SQL Develop7

    PL/SQLDeveloper是一种集成的开发环境,专门用于开发、测试、调试和优化OraclePL/SQL存储程序单元,比如触发器等。PL/SQLDeveloper功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...

    pl/sql-7.1.5

    PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...

Global site tag (gtag.js) - Google Analytics