`
lxf3339
  • 浏览: 61008 次
  • 性别: 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列,依次类推。

分享到:
评论

相关推荐

    pl/sql最新中文手册

    8. **索引和性能优化**:手册可能也会涉及如何利用索引来提高PL/SQL程序的执行效率,以及如何分析和优化SQL语句。 9. **并发和锁定**:在多用户环境下,理解并发控制和锁定机制是必要的。手册可能会讨论如何处理...

    oracle10g_pl/sql

    6. **PL/SQL性能优化** - **绑定变量**:减少解析次数,提高执行效率。 - **存储优化**:合理使用索引、分区等技术提升查询速度。 - **事务管理**:理解COMMIT、ROLLBACK和SAVEPOINT,确保数据一致性。 7. **...

    一个对数据库的操作工具PL/SQLpl/sqL工具

    10. **性能优化**:PL/SQL可以利用Oracle的内置优化器,提高SQL查询的执行效率。 PLSQL7121363这个文件名可能是指PL/SQL工具的某个版本或特定的组件,具体的功能和特性可能需要根据实际的软件来解读。在实际工作中...

    pl/sql developer11.0

    7. **性能优化**:提供性能分析工具,如执行计划分析、SQL Tuning Advisor等,帮助优化SQL语句,提高数据库运行效率。 8. **版本控制集成**:与其他版本控制系统(如Git、SVN)无缝集成,便于版本管理和代码协同。 ...

    Oracle PL/SQL实战(待续)

    Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计...通过实践和学习"Oracle PL/SQL实战(待续)"的相关内容,我们可以提升在Oracle环境中解决问题的能力,更好地管理和优化数据库系统。

    Oracle pl/SQL 优化 华为

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

    oracle pl/sql从入门到精通 配套源代码

    8. **性能优化**:如何编写高效的PL/SQL代码,使用绑定变量、避免全表扫描、索引优化等技巧。 通过这本书的配套源代码,读者将有机会实际操作这些概念,加深对Oracle PL/SQL的理解,并提升数据库开发技能。每个示例...

    PL/SQL VCS插件安装包+PL/SQL

    PL/SQL Developer是一款流行的Oracle数据库开发工具,它提供了编写、调试、测试和优化PL/SQL代码的功能。而VCS插件的引入,使得开发者无需离开这个熟悉的环境,就能完成版本控制的相关任务,如版本对比、历史查看、...

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

    - **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步优化PL/SQL程序的性能。 #### 八、实战案例分析 - **案例研究**:通过实际案例来演示如何综合运用前面章节所学的...

    pl/sql 免安装,绿色版pl/sql

    5. **报表和图表**:PL/SQL Developer提供了一定的报表生成功能,可以生成关于数据库对象的各种统计报告,如表空间使用情况、索引分析等,为数据库性能优化提供参考。 6. **连接管理**:用户可以创建多个数据库连接...

    PL/SQL Developer 远程连接Oracle数据库

    8. **性能监控**:尽管是远程连接,PL/SQL Developer仍然可以显示执行计划、统计信息和性能指标,帮助分析和优化SQL查询。 9. **版本控制集成**:PL/SQL Developer可以与各种版本控制系统(如Git、SVN)集成,这...

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

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

    oracle_pl/sql 优化

    oracle_pl/sql 优化

    PL/SQL下载

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...

    PL/SQL开发文档1

    1. Oracle SQL Developer是Oracle提供的一个集成开发环境(IDE),它提供了编写、调试、优化PL/SQL代码的功能。 2. SQL*Plus是Oracle提供的一个命令行工具,允许用户执行SQL语句和PL/SQL代码块,并获取查询结果。 ...

    Oracle Database 12c PL/SQL开发指南 实例源代码

    9. **索引和性能优化**:了解如何创建和使用索引,以及通过PL/SQL分析和优化SQL查询性能。 10. **并发控制**:PL/SQL中的锁定机制,如ROW LEVEL LOCKING,以及如何处理死锁问题。 11. **错误处理和日志记录**:...

    Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发

    8. **索引优化和性能调优**:深入研究如何利用PL/SQL进行性能分析,以及如何通过索引、物化视图、表分区等手段提升查询性能。 9. **并发控制**:介绍PL/SQL中的锁定机制,如ROWLOCK和SHARE锁,以及如何避免死锁。 ...

    PL/SQL入门到精通书的源代码

    11. **索引组织表(IOT)和嵌套表**:了解如何在PL/SQL中操作这些特殊的表类型,可以帮助你优化特定的数据存储和检索需求。 12. **游标变量**:游标变量是PL/SQL中的一种特殊变量,可以直接存储查询结果,用于在...

    Oracle PL/SQL实例精解 数据库建立代码

    总结起来,"Oracle PL/SQL实例精解 数据库建立代码"涵盖了数据库设计、对象创建、索引优化以及数据插入等多个方面,是学习和提升Oracle数据库管理技能的宝贵资源。通过解析和执行这些示例,开发者可以更好地理解和...

    Oracle PL/SQL学习官方教材

    10. **性能优化**:教材可能涵盖性能监控和调优技术,如分析SQL语句的执行计划,使用绑定变量,以及如何使用PL/SQL Profiler进行性能分析。 11. **数据库对象的动态SQL**:通过EXECUTE IMMEDIATE和DBMS_SQL包,可以...

Global site tag (gtag.js) - Google Analytics