www.dbonline.cn
1 ORACLE 采用两种访问表中记录的方式:
a. 全表扫描
全表扫描就是顺序地访问表中每条记录. ORACLE 采用一次读入多个数据块(database block)的方式
优化全表扫描.
b. 通过 ROWID 访问表
你可以采用基于 ROWID 的访问方式情况,提高访问表的效率, , ROWID 包含了表中记录的物理位置
信息..ORACLE 采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引
提供了快速访问 ROWID 的方法,因此那些基于索引列的查询就可以得到性能上的提高.
2. 共 享 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. 字 符 级 的 比 较 :
当前被执行的语句和共享池中的语句必须完全相同.
B. 两个语句所指的对象必须完全相同:
考 虑 一 下 下 列 SQL 语 句 能 否 在 这 两 个 用 户 之 间 共 享 .
SQL
能 否 共 享
原因
select max(sal_cap) from sal_limit;
不 能
每个用户都有一个 private synonym - sal_limit , 它们是不同的对象
select count(*0 from work_city where sdesc like 'NEW%';
能
两 个 用 户 访 问 相 同 的 对 象 public synonym - work_city
select a.sdesc,b.location from work_city a , plant_detail b where a.city_id = b.city_id
不 能
用户 jack 通过 private synonym 访问 plant_detail 而 jill 是表的所有者,对象不同.
评论0
最新资源