没有合适的资源?快使用搜索试试~ 我知道了~
首页Oracle SQL 性能优化
资源详情
资源评论
资源推荐
性能优化系列
选用适合的 优化器
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 优化器,而直接采用基于规则或
者基于成本的优化器.
访问 的方式
ORACLE 采用两种访问表中记录的方式:
a. 全表扫描
全表扫描就是顺序地访问表中每条记录 . ORACLE 采用一次读入多个数据块
(database block)的方式优化全表扫描.
b. 通过 ROWID 访问表
你可以采用基于 ROWID 的访问方式情况,提高访问表的效率, , ROWID 包含了
表中记录的物理位置信息..ORACLE 采用索引(INDEX)实现了数据和存放数据的
物理位置(ROWID)之间的联系. 通常索引提供了快速访问 ROWID 的方法,因此那
些基于索引列的查询就可以得到性能上的提高.
共享 语句
为了不重复解析相同的 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. 两个语句所指的对象必须完全相同:
例如:
用户 对象名 如何访问
Jack sal_limit private synonym
Work_city public synonym
Plant_detail public synonym
Jill sal_limit private synonym
Work_city public synonym
Plant_detail table owner
考虑一下下列 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 是表的所有者,对象不同.
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 的解析器按照从右到左的顺序处理 FROM 子句中的表名,因此 FROM
子句中写在最后的表(基础表 driving table)将被最先处理. 在 FROM 子句中包含
多个表的情况下,你必须选择记录条数最少的表作为基础表.当 ORACLE 处理多
个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM 子句中最
后的那个表)并对记录进行派序,然后扫描第二个表(FROM 子句中最后第二个表),
最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.
例如:
表 TAB1 16,384 条记录
表 TAB2 1 条记录
选择 TAB2 作为基础表 (最好的方法)
select count(*) from tab1,tab2 执行时间 0.96 秒
选择 TAB2 作为基础表 (不佳的方法)
select count(*) from tab2,tab1 执行时间 26.09 秒
如果有 3 个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础
表, 交叉表是指那个被其他表所引用的表.
例如:
EMP 表描述了 LOCATION 表和 CATEGORY 表的交集.
SELECT *
FROM LOCATION L ,
CATEGORY C,
EMP E
WHERE E.EMP_NO BETWEEN 1000 AND 2000
AND E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN
将比下列 SQL 更有效率
SELECT *
FROM EMP E ,
LOCATION L ,
CATEGORY C
WHERE E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN
AND E.EMP_NO BETWEEN 1000 AND 2000
子句中的连接顺序.
ORACLE 采用自下而上的顺序解析 WHERE 子句,根据这个原理,表之间的连接
必须写在其他 WHERE 条件之前, 那些可以过滤掉最大数量记录的条件必须写在
WHERE 子句的末尾.
例如:
(低效,执行时间 156.3 秒)
SELECT …
FROM EMP E
WHERE SAL > 50000
AND JOB = ‘MANAGER’
AND 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO);
(高效,执行时间 10.6 秒)
SELECT …
FROM EMP E
WHERE 25 < (SELECT COUNT(*) FROM EMP
WHERE MGR=E.EMPNO)
AND SAL > 50000
剩余43页未读,继续阅读
book523
- 粉丝: 10
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0