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 696个人改进建议: 1、游标取数时,采用批量取数的方法: ... -
oracle10g 的一个问题
2011-03-02 11:39 640oracle10g 的一个问题: 创建主键的时候, 默 ... -
Oracle视图使用
2011-02-15 17:13 0Oracle视图使用经验谈: 1、如果视图仅仅是 ... -
Oracle 10g 中的递归查询(树型查询)
2011-01-27 01:35 925Oracle 10g 中的递归查询(树型查询) 一、树型表 ... -
PLSQL 中Merge into和Update的用法
2011-01-27 01:31 1478在oracle 中有个语法:merge 用法如下: ... -
Oracle培训的总结
2011-01-27 01:30 698前段时间,因为要升级系统到Oracle环境,公司请了一位在 ... -
Oracle 培训材料
2011-01-27 01:29 626前段时间给公司做个Oracle培训,一直在学oracl ... -
Oracle 简单的SQL调优
2011-01-27 01:27 728今天刚看到一篇简单的SQL调优,自己也试了一下优化。原文如下: ... -
PL/SQL最差实践
2011-01-27 01:15 5661. 超长的PL/SQL代码 影响:可维护性,性能 ... -
大表变小表,小表再连接————记一次PL/SQL优化过程
2011-01-27 01:12 1244公司的业务系统中存在一个大的日志表,表大约是这样:cre ... -
高效的PL/SQL程序设计--批量处理
2011-01-27 00:59 612批量处理一般用在ETL操作, ETL代表提取(extract) ... -
PL/SQL用户指南与参考--PL/SQL应用程序性能调优(转)
2011-01-27 00:57 624PL/SQL应用程序性能调优 <!-- Instanc ... -
PLSQL 中Merge into和Update的用法
2011-01-18 20:42 1281这两天一直在处理关于SQL server存储过程转换到Orac ... -
Oracle SQL 内置函数大全
2009-03-25 21:25 607SQL中的单记录函数 1.ASCI ... -
PL/SQL中用光标查询多条记录
2009-03-25 21:19 733一、 什么是光标 Oracle ... -
PL/SQL开发中动态SQL的使用方法
2009-03-25 21:11 1119一般的PL/SQL程序设计中,在DML和事务控制的语句中可 ...
相关推荐
8. **索引和性能优化**:手册可能也会涉及如何利用索引来提高PL/SQL程序的执行效率,以及如何分析和优化SQL语句。 9. **并发和锁定**:在多用户环境下,理解并发控制和锁定机制是必要的。手册可能会讨论如何处理...
6. **PL/SQL性能优化** - **绑定变量**:减少解析次数,提高执行效率。 - **存储优化**:合理使用索引、分区等技术提升查询速度。 - **事务管理**:理解COMMIT、ROLLBACK和SAVEPOINT,确保数据一致性。 7. **...
10. **性能优化**:PL/SQL可以利用Oracle的内置优化器,提高SQL查询的执行效率。 PLSQL7121363这个文件名可能是指PL/SQL工具的某个版本或特定的组件,具体的功能和特性可能需要根据实际的软件来解读。在实际工作中...
7. **性能优化**:提供性能分析工具,如执行计划分析、SQL Tuning Advisor等,帮助优化SQL语句,提高数据库运行效率。 8. **版本控制集成**:与其他版本控制系统(如Git、SVN)无缝集成,便于版本管理和代码协同。 ...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL的数据处理能力与PL的程序设计...通过实践和学习"Oracle PL/SQL实战(待续)"的相关内容,我们可以提升在Oracle环境中解决问题的能力,更好地管理和优化数据库系统。
Oracle pl/SQL 优化 华为内部资料
8. **性能优化**:如何编写高效的PL/SQL代码,使用绑定变量、避免全表扫描、索引优化等技巧。 通过这本书的配套源代码,读者将有机会实际操作这些概念,加深对Oracle PL/SQL的理解,并提升数据库开发技能。每个示例...
PL/SQL Developer是一款流行的Oracle数据库开发工具,它提供了编写、调试、测试和优化PL/SQL代码的功能。而VCS插件的引入,使得开发者无需离开这个熟悉的环境,就能完成版本控制的相关任务,如版本对比、历史查看、...
- **性能提升技术**:提供了一些具体的例子和最佳实践,展示了如何利用Oracle 11g的新特性来进一步优化PL/SQL程序的性能。 #### 八、实战案例分析 - **案例研究**:通过实际案例来演示如何综合运用前面章节所学的...
5. **报表和图表**:PL/SQL Developer提供了一定的报表生成功能,可以生成关于数据库对象的各种统计报告,如表空间使用情况、索引分析等,为数据库性能优化提供参考。 6. **连接管理**:用户可以创建多个数据库连接...
8. **性能监控**:尽管是远程连接,PL/SQL Developer仍然可以显示执行计划、统计信息和性能指标,帮助分析和优化SQL查询。 9. **版本控制集成**:PL/SQL Developer可以与各种版本控制系统(如Git、SVN)集成,这...
《Oracle PL/SQL程序设计(第5版)(套装上下册)》不但介绍了大量的Oracle 11g的PL/SQL新性能,还提供了许多优化PL/SQL性能的新方法。 《Oracle PL/SQL程序设计(第5版)(套装上下册)》结构清晰,示例丰富,...
oracle_pl/sql 优化
PL/SQL是Oracle数据库系统中的一个关键组成部分,它是一种结合了SQL语言与过程编程的语言,专为数据库管理和应用程序开发设计。PL/SQL全称为“Procedural Language/Structured Query Language”,它提供了丰富的控制...
1. Oracle SQL Developer是Oracle提供的一个集成开发环境(IDE),它提供了编写、调试、优化PL/SQL代码的功能。 2. SQL*Plus是Oracle提供的一个命令行工具,允许用户执行SQL语句和PL/SQL代码块,并获取查询结果。 ...
9. **索引和性能优化**:了解如何创建和使用索引,以及通过PL/SQL分析和优化SQL查询性能。 10. **并发控制**:PL/SQL中的锁定机制,如ROW LEVEL LOCKING,以及如何处理死锁问题。 11. **错误处理和日志记录**:...
8. **索引优化和性能调优**:深入研究如何利用PL/SQL进行性能分析,以及如何通过索引、物化视图、表分区等手段提升查询性能。 9. **并发控制**:介绍PL/SQL中的锁定机制,如ROWLOCK和SHARE锁,以及如何避免死锁。 ...
11. **索引组织表(IOT)和嵌套表**:了解如何在PL/SQL中操作这些特殊的表类型,可以帮助你优化特定的数据存储和检索需求。 12. **游标变量**:游标变量是PL/SQL中的一种特殊变量,可以直接存储查询结果,用于在...
总结起来,"Oracle PL/SQL实例精解 数据库建立代码"涵盖了数据库设计、对象创建、索引优化以及数据插入等多个方面,是学习和提升Oracle数据库管理技能的宝贵资源。通过解析和执行这些示例,开发者可以更好地理解和...
10. **性能优化**:教材可能涵盖性能监控和调优技术,如分析SQL语句的执行计划,使用绑定变量,以及如何使用PL/SQL Profiler进行性能分析。 11. **数据库对象的动态SQL**:通过EXECUTE IMMEDIATE和DBMS_SQL包,可以...