1. 选用适合的 ORACLE 优化器
ORACLE 的优化器共有3种:
a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性)
设置缺省的优化器, 可以通过对 init.ora 文件中 OPTIMIZER_MODE 参数的各种声明, 如 RULE, COST, CHOOSE, ALL_ROWS, FIRST_ROWS
你当然也在 SQL 句级或会话(session)级对其进行覆盖.
为了使用基于成本的优化器(CBO, Cost-Based Optimizer), 你必须经常运行 analyze 命令, 以增加数据库中的对象统计信息(object statistics)的准确性.
如果数据库的优化器模式设置为选择性(CHOOSE), 那么实际的优化器模式将和是否运行过 analyze 命令有关. 如果 table 已经被 analyze 过, 优化器模式将自动成为 CBO, 反之, 数据库将采用 RULE 形式的优化器.
在缺省情况下, ORACLE 采用 CHOOSE 优化器, 为了避免那些不必要的全表扫描(full table scan), 你必须尽量避免使用 CHOOSE 优化器, 而直接采用基于规则或者基于成本的优化器.
2. 访问 Table 的方式
ORACLE 采用两种访问表中记录的方式:
a. 全表扫描: 顺序地访问表中每条记录. ORACLE 采用一次读入多个数据块(database block)的方式优化全表扫描.
b. 通过 ROWID 访问表:
你可以采用基于 ROWID 的访问方式情况, 提高访问表的效率, ROWID 包含了表中记录的物理位置信息.
ORACLE 采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问 ROWID 的方法,
因此那些基于索引列的查询就可以得到性能上的提高. 索引表不含 ROWID 值.
3. 共享 SQL 语句
为了不重复解析相同的 SQL 语句, 在第一次解析之后, ORACLE 将 SQL 语句存放在内存中. 这块位于系统全局区域 SGA(system global area) 的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此, 当你执行一个 SQL 语句(有时被称为一个游标)时, 如果它和之前的执行过的语句完全相同, ORACLE 就能很快获得已经被解析的语句以及最好的执行路径. ORACLE 的这个功能大大地提高了 SQL 的执行性能并节省了内存的使用. 可惜的是 ORACLE 只对简单的表提供高速缓冲(cache buffering), 这个功能并不适用于多表连接查询.
数据库管理员必须在 init.ora 中为这个区域设置合适的参数, 当这个内存区域越大, 就可以保留更多的语句, 当然被共享的可能性也就越大了.当你向 ORACLE 提交一个 SQL 语句, ORACLE 会首先在这块内存中查找相同的语句.
这里需要注明的是, ORACLE 对两者采取的是一种严格匹配, 要达成共享, SQL 语句必须完全相同(包括空格, 换行等).
共享的语句必须满足三个条件:
A. 字符级的比较:
当前被执行的语句和共享池中的语句必须完全相同.
例如:
SELECT * FROM EMP;
和下列每一个都不同
SELECT * from EMP;
Select * From Emp;
SELECT * FROM EMP;
B. 两个语句所指的对象必须完全相同:
例如:
考虑一下下列SQL语句能否在这两个用户之间共享.
-------------------------------------------------------------------------
sql 能否共享 原因
-------------------------------------------------------------------------
select max(sal_cap) from sal_limit; 不能 每个用户都有一个
private synonym - sal_limit
他们是不同的对象
-------------------------------------------------------------------------
select count(*) from work_city 能 两个用户访问相同的对象
where sdesc like 'new%'; public synonym - work_city
-------------------------------------------------------------------------
select a.sdesc, b.localtion 用户 jack 通过 private synonym
from work_city a, plant_detail b 不能 访问 plant_detail 而 jill 是
where a.city_id = b.city_id 表的所有者, 对象不同
-------------------------------------------------------------------------
C. 两个 SQL 语句中必须使用相同的名字的绑定变量(bind variables)
例如:
第一组的两个 SQL 语句是相同的(可以共享),而第二组中的两个语句是不同的(即使在运行时,赋于不同的绑定变量相同的值)
a.
select pin, name from people where pin = :blk1.pin;
select pin, name from people where pin = :blk1.pin;
b.
select pin, name from people where pin = :blk1.ot_ind;
select pin, name from people where pin = :blk1.ov_ind;
分享到:
相关推荐
"ORACLE优化2"这个主题涵盖了优化过程的第二部分,这通常包括更深入的技术细节、测试策略以及一些基础理论的巩固。在这个资料集中,我们可以期待找到一些关键的优化技术和实践经验。 1. **SQL优化**:SQL查询是...
《基于成本的Oracle优化法则》是数据库专家Jonathan Lewis的一部经典著作,该书深入探讨了Oracle数据库的性能优化策略,特别是在成本基础优化方面。Oracle数据库是全球广泛使用的大型企业级数据库系统,其性能优化...
Oracle 优化器介绍 Oracle 优化器是 Oracle 数据库中的一种核心组件,负责生成执行计划,以提高 SQL 语句的执行效率。 Oracle 优化器可以分为两大类:基于规则的优化器(RBO)和基于成本的优化器(CBO)。 基于...
"基于成本的Oracle优化法则"是一个重要的概念,它涉及到Oracle数据库查询优化器的工作原理。在这个主题中,我们将深入探讨这一法则,理解其背后的机制,并学习如何利用这些知识来提升数据库性能。 1. **基于成本的...
Oracle 优化常用概念 Oracle 优化器是 Oracle 数据库管理系统中一个核心组件,负责根据用户提交的 SQL 语句生成最优的执行计划,以提高查询效率。以下是 Oracle 优化器中的一些常用概念: CBO/RBO Oracle 优化...
Oracle优化设计方案旨在提升数据库性能,确保数据安全,便于管理和开发。设计Oracle数据库时,需要遵循一系列基本原则和步骤。 首先,逻辑建模是根据系统需求分析数据间的内在和外在关系,构建整个系统的数据结构。...
### Oracle优化重量级知识点解析 #### 一、Oracle优化的重要性 在数据库管理领域,Oracle数据库因其卓越的性能、稳定性和安全性而被广泛采用。然而,随着业务量的增长和技术的发展,即使是像Oracle这样的顶级...
优化笔记 sql性能的调整-总结 SQL代码性能优化 Oracle语句优化53个规则详解 ORACLE9i优化设计与系统调整 oracle9i优化器介绍 oracle9i的查询优化 ……
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
Oracle数据库性能优化是确保系统高效运行的关键环节,尤其是在大数据量和高并发的环境中。Oracle数据库因其先进、完整和集成的特性,在市场中占据主导地位,因此深入理解和掌握Oracle的优化技术至关重要。 首先,...
该培训资料中包括5大内容块: 1>Oracle分区技术及大数据量操作性能优化 2>Oracle性能问题一般解决思路 3>Oracle常用hint 4>Oracle动态图 5>Oracle执行计划和SQL调优
### Oracle优化教程知识点详解 #### 一、选用适合的Oracle优化器 在Oracle数据库中,优化器的选择对于SQL语句的执行效率至关重要。Oracle提供了三种优化器类型:基于规则(RULE)、基于成本(COST)和选择性...
ORACLE SQL性能优化系列 ORACLE SQL性能优化是数据库管理员和开发者非常关心的一个话题。为了提高数据库的性能,ORACLE 提供了多种优化技术。下面我们将详细介绍 ORACLE SQL 性能优化系列中的一些重要知识点。 一...
### Oracle优化方法与实践 #### 一、优化器模式选择 在进行Oracle数据库优化时,首先需要关注的是优化器模式的选择。Oracle提供了多种优化器模式,包括基于规则的优化器(RULE)、基于成本的优化器(COST)以及...
《Oracle查询优化改写技巧与案例》不讲具体语法,只是以案例的形式介绍各种查询语句的用法。第1~4章是基础部分,讲述了常用的各种基础语句,以及常见的错误和正确语句的写法。这部分的内容应熟练掌握,因为日常查询...
Oracle优化PPT教程通常会涵盖一系列关键概念和技术,旨在提高数据库的运行效率,减少资源消耗,提升用户体验。以下是对这个教程可能涉及的知识点的详细解释: 1. **SQL优化**:这是Oracle数据库优化的核心,涉及到...
Oracle SQL 优化 Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表的全表扫描、缓存小型表的全表扫描、检验优化索引的使用、检验优化的连接技术...
2. **SQL优化**:通过分析SQL语句的执行计划,DBA可以识别出低效的查询并进行优化,如避免全表扫描,利用索引,减少连接操作,以及使用绑定变量等。 3. **表和分区优化**:表分区是Oracle的一大特色,通过将大表...