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 将更显著地提高效率,下一节中将指出
分享到:
相关推荐
2. ADDM建议:应用Automatic Diagnostic Advisor的建议进行问题解决。 3. 实时监控:使用DBMS_SESSION和V$视图实时查看会话、等待事件和性能指标。 总结,Oracle数据库调优是个复杂且系统的工程,涉及到硬件、操作...
### Oracle系统调优方法 #### 一、Oracle性能调优的重要性及目标 Oracle数据库作为业界领先的企业级数据库管理系统之一,在企业信息化建设中扮演着至关重要的角色。为了确保Oracle数据库能够高效稳定地运行,并且...
2. Oracle 开发过程中的调优 在开发过程中,需要对业务逻辑进行优化、优化设计方法、优化 SQL 语句、优化游标等。同时,也需要对内存使用进行优化,例如给 Oracle 更多内存,SGA 调整、shared_pool 调整等。此外,...
- **使用SQL Tuning Advisor和SQL Access Advisor**:针对特定SQL语句提出调优建议。 - **处理死锁和锁争用**:分析v$lock视图,诊断和解决锁相关的问题。 - **分析和优化表空间的使用情况**:例如,使用表空间映射...
- **ADDM(Automatic Database Diagnostic Monitor)**:自动数据库诊断监控器,基于AWR数据生成诊断报告,提供性能调优建议。 - **V$视图**:Oracle 提供了大量的动态性能视图(V$ Views),这些视图包含了关于...
Oracle数据库性能调优是数据库管理员和开发人员的关键技能之一,尤其在处理大数据量、高并发的业务场景下显得尤为重要。"Oracle性能调优向导"这本书旨在为读者提供全面而实用的Oracle性能优化策略和技巧。 一、...
以下是一些重要的实践建议: - **表的设计**:合理设计表结构,采用适当的索引策略。 - **索引的使用**:创建必要的索引以加速查询,同时避免过度索引导致的维护成本增加。 - **回滚段和重做日志**:根据并发事务量...
Oracle数据库编程调优手册是一本针对数据库开发者和管理员的重要参考资料,旨在帮助他们提升Oracle数据库的性能和效率。手册涵盖了多个关键领域,包括数据加载优化、UPDATE语句的优化、DELETE操作的改进、DBA级别的...
13. **SQL优化工具**:Oracle提供了一些内置工具,如SQL Tuning Advisor和Automatic Workload Repository (AWR),它们可以帮助识别性能问题并提出优化建议。 Oracle 19C SQL调优是一门深入且实践性强的学问,需要...
Oracle 性能调优大全 Oracle 是一个功能强大的关系数据库管理系统,但是随着数据库的增长,性能问题开始变得越来越重要。为此,我们需要对 Oracle 进行性能调优,以提高数据库的响应速度和效率。下面是 Oracle ...
《Oracle 19C SQL调优指南》是针对Oracle数据库管理员(DBA)的重要参考资料,尤其适合那些希望提升SQL性能的专业人士。SQL调优是数据库管理中的核心技能,它关乎到系统的响应时间、资源利用率和整体性能。Oracle 19C...
### Oracle数据库查询调优知识点详解 #### 一、概述 在Oracle数据库中,查询调优是提高系统性能的关键环节之一。随着数据量的增长和技术的进步,优化查询变得日益重要。本篇将详细介绍如何识别问题、收集数据、分析...
2. **Snapshot方法**:在小表调优中,Snapshot是一种常用的技术,它用于快速获取数据的快照,以减少对数据库的直接访问,从而提高性能。 3. **Dblink插入**:对于大表,通过db_link(数据库链接)进行数据插入是一...
### Oracle SQL调优原则 #### 一、使用索引的重要性 - **索引与全表扫描的对比**:虽然在某些特殊情况下,使用索引可能会稍微慢于全表扫描,但这通常只存在于同一数量级上的差异。而在大多数情况下,使用索引能够...
2. **ORACLE的执行计划**:执行计划是Oracle数据库为执行SQL语句制定的详细步骤,包括选择访问路径、决定表连接顺序、确定操作方式(如全表扫描或索引查找)等。理解执行计划能帮助我们识别性能瓶颈,比如不必要的全...
### Oracle性能调优技术内幕 #### 一、优化语录与原则 1. **优化一点总比什么都不做强**:在数据库性能调优过程中,即便是最小的改进也能带来显著的效果。 2. **没有任何东西可以替代最佳的SQL语句**:编写高效、...
- **SQL调优顾问**:使用Oracle的内置工具进行SQL优化建议。 3. **存储结构优化**: - **表和分区设计**:选择合适的表空间、段、区、块大小,以及分区策略(范围、列表、哈希等)。 - **表压缩**:了解Oracle的...
### Oracle实例调优知识点 #### 一、Oracle实例概述 Oracle数据库系统中的一个实例是指一组内存结构和进程,这些内存结构和进程共同管理一个物理数据库文件。实例是数据库的一个运行时映像,它包含了用于访问数据库...
本文主要探讨了在Oracle数据库性能优化实践中的一些心得,重点关注等待事件和操作系统层面的问题。 首先,文章指出现在的性能优化策略已经转向优化等待事件,即关注数据库在执行过程中遇到的等待问题。这些等待事件...