8. 用TRUNCATE替代全表DELETE
当删除表中的记录时,在通常情况下, 回滚段(rollback segments ) 用来存放可以被恢复的信息. 如果你没有COMMIT事务,ORACLE会将数据恢复到删除之前的状态(准确地说是恢复到执行删除命令之前的状况)
而当运用TRUNCATE时, 回滚段不再存放任何可被恢复的信息.当命令运行后,数据不能被恢复.因此很少的资源被调用,执行时间也会很短.
TRUNCATE只在删除全表适用,TRUNCATE是DDL不是DML.
9. 尽量多使用COMMIT
只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:
COMMIT所释放的资源:
a. 回滚段上用于恢复数据的信息.
b. 被程序语句获得的锁
c. redo log buffer 中的空间
d. ORACLE为管理上述3种资源中的内部花费
注: 在使用COMMIT时必须要注意到事务的完整性,现实中效率和事务完整性往往是鱼和熊掌不可得兼
10.用Where子句替换HAVING子句
避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销.
例如:
低效:
SELECT REGION,AVG(LOG_SIZE)
FROM LOCATION
GROUP BY REGION
HAVING REGION REGION != ‘SYDNEY’
AND REGION != ‘PERTH’
高效
SELECT REGION,AVG(LOG_SIZE)
FROM LOCATION
WHERE REGION REGION != ‘SYDNEY’
AND REGION != ‘PERTH’
GROUP BY REGION
注: HAVING 中的条件一般用于对一些集合函数的比较,如COUNT() 等等. 除此而外,一般的条件应该写在WHERE子句中
11.减少对表的查询
在含有子查询的SQL语句中,要特别注意减少对表的查询.
例如:
低效
SELECT TAB_NAME
FROM TABLES
WHERE TAB_NAME = ( SELECT TAB_NAME
FROM TAB_COLUMNS
WHERE VERSION = 604)
AND DB_VER= ( SELECT DB_VER
FROM TAB_COLUMNS
WHERE VERSION = 604)
高效
SELECT TAB_NAME
FROM TABLES
WHERE (TAB_NAME,DB_VER)= ( SELECT TAB_NAME,DB_VER)
FROM TAB_COLUMNS
WHERE VERSION = 604)
Update 多个Column 例子:
低效:
UPDATE EMP
SET EMP_CAT = (SELECT MAX(CATEGORY) FROM EMP_CATEGORIES),
SAL_RANGE = (SELECT MAX(SAL_RANGE) FROM EMP_CATEGORIES)
WHERE EMP_DEPT = 0020;
高效:
UPDATE EMP
SET (EMP_CAT, SAL_RANGE)
= (SELECT MAX(CATEGORY) , MAX(SAL_RANGE)
FROM EMP_CATEGORIES)
WHERE EMP_DEPT = 0020;
13.使用表的别名(Alias)
当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
(译者注: Column歧义指的是由于SQL中不同的表具有相同的Column名,当SQL语句中出现这个Column时,SQL解析器无法判断这个Column的归属)
14.用EXISTS替代IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率.
低效:
SELECT *
FROM EMP (基础表)
WHERE EMPNO > 0
AND DEPTNO IN (SELECT DEPTNO
FROM DEPT
WHERE LOC = ‘MELB’)
高效:
SELECT *
FROM EMP (基础表)
WHERE EMPNO > 0
AND EXISTS (SELECT ‘X’
FROM DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
AND LOC = ‘MELB’)
注: 相对来说,用NOT EXISTS替换NOT IN 将更显著地提高效率,下一节中将指出
分享到:
相关推荐
当应用管理员向我们通告现在应用很慢、数据库很慢的时侯,我们到数据库时做几个示例的Select也发现同样的问题时,有些时侯我们会无从下手,因为我们认为数据库的各种命种率都是满足Oracle文档的建议。
让Oracle跑得更快__Oracle_10g性能分析与优化主要针对oracle性能调优进行详细分析。并且该文档提供了很好的oracle性能优化建议。
Oracle调优之初始化参数说明及建议,很有用的数据库优化参考文档.供初级的朋友数据库调优参考.要上dba道路,从这里看起
oracle游标溢出调优着眼点枚举。通过对相关数据字典和参数的分析,给出建议。
*以oracle公司提供的建议为主、关系型数据库的理论为辅,学习oracle数据库的工作原理。 *真正熟悉sga的内涵,进而提升oracle服务器的性能。 *像协奏曲那样,让oracle数据库相关文件彼此正常且有效率地分工协作。 *...
不错的东东,通俗易懂,建议学习.赶紧下载吧
orcale的sql调优
数据库性能调优技术1索引调优,详细讲述了关于索引调优的方法建议
4、建议有兴趣的同学去学习一下 oracle plsql 编写技巧,能在 plsql 缩写技能与编程 思想上有所提升。 5、Awr 二个包的代码极其复杂,对学习者的 plsql 编写能力有要求。 6、对应的二个包还包括 ADDM,ASH 的源码,...
86.超过2g的segment(单个表超过2g建议使用分区表) 87.数据库长事务(执行超过6s) 88.产生大量物理读的进程 89.产生归档日志过快的进程 90.等待事件对应的sql语句 91.占用大量temp表空间的session和sql监控 92....
oracle数据库的经典调优文档,建议dba深入阅读
下面将在 Hardware (Server)、Disk I/O、Application、Oracle Database 提出 了一系列优化建议。本文档将对相关技术细节进行总结。 文档将包括如下主要内容: z Oracle Database 性能数据收集、分析和调优方法 z ...
oracle rac日常基本维护命令 2 Oracle RAC性能调整 12 详解Oracle RAC入门和提高 27 ORACLE RAC数据库配置Dataguard环境 49 老白对于RAC应用调优的建议 51
图形化、实时显示 Oracle Instance的活动状态 利用数据流、图形、颜色和声音等方式报警,识别系统问题 显示有关问题的详细信息,如活动的 Sessions、资源消耗大的SQL语句、Disk I/O以及...内置调优建议 与其它模块集成
通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...
以下对TOAD有关疑问解答和技巧描述都是基于Toad for Oracle Xpert(Version 11.6.1.6,Toad for Oracle Xpert是Toad调优版,包括了专业版全部功能。额外增加了SQL调优功能。),如果与大家在实际工作中遇到情况有所...
通过学习《Oracle Database 11g完全参考手册》,您可以了解如何实现最新的安全措施,如何调优数据库的性能,如何部署网格计算技术。附录部分内容丰富、便予参照,包括Oracle命令、关键字、功能以及函数等。 目录 ...
适合有一定oracle运维经验的人看的一本调优的好书,建议阅读。
详细讲述RHEL5.4+ORACLE11G+WEBLOGIC10.3各自安装步骤和集群步骤...包括资源中心系统部署结构,整体部署方案,性能调优建议三大部分,图文并茂,有详细步骤截图.非常适合初学者学习,也适合有一经验的工作者作为技术参考资料
Oracle性能优化是针对数据优化的一些方法和建议,里面讲解的很详细,从为什么要优化,讲到缓存,连接池,SGA,SQL调优,优化器等等。。对于有这方面需求的朋友来说,很有帮助的,也是很难得的。