没有合适的资源?快使用搜索试试~ 我知道了~
首页Oracle SQL优化法则
资源详情
资源评论
资源推荐
################################################################
Oracle 语句优化53个规则详解
################################################################
Oracle 语句优化53个规则详解(1)
Oracle sql 性能优化调整 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 的方法,因此那些基于索引列
的查询就可以得到性能上的提高。
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. 两个语句所指的对象必须完全相同:
例如:
用户 对象名 如何访问
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;
4. 选择最有效率的表名顺序(只在基于规则的优化器中有效)
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 语句优化53个规则详解(2)
5. WHERE 子句中的连接顺序。 ORACLE 采用自下而上的顺序解析 WHERE 子句,
根据这个原理,表之间的连接必须写在其他 WHERE 条件之前, 那些可以过滤掉最大数量
记录的条件必须写在 WHERE 子句的末尾。
例如:
剩余47页未读,继续阅读
xjlz0001
- 粉丝: 0
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2023年中国辣条食品行业创新及消费需求洞察报告.pptx
- 2023年半导体行业20强品牌.pptx
- 2023年全球电力行业评论.pptx
- 2023年全球网络安全现状-劳动力资源和网络运营的全球发展新态势.pptx
- 毕业设计-基于单片机的液体密度检测系统设计.doc
- 家用清扫机器人设计.doc
- 基于VB+数据库SQL的教师信息管理系统设计与实现 计算机专业设计范文模板参考资料.pdf
- 官塘驿林场林防火(资源监管)“空天地人”四位一体监测系统方案.doc
- 基于专利语义表征的技术预见方法及其应用.docx
- 浅谈电子商务的现状及发展趋势学习总结.doc
- 基于单片机的智能仓库温湿度控制系统 (2).pdf
- 基于SSM框架知识产权管理系统 (2).pdf
- 9年终工作总结新年计划PPT模板.pptx
- Hytera海能达CH04L01 说明书.pdf
- 数据中心运维操作标准及流程.pdf
- 报告模板 -成本分析与报告培训之三.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2