oracle初步优化(一)
来源:互联网 发布:大数据新闻节目 编辑:程序博客网 时间:2024/05/22 08:19
以前的项目是ssh+oracle,当时对oracle不太熟,所以看了一些oracle优化方面的东东,给大家分享一下。
1数据库级别
1.1选用适合的优化器
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优化器,而直接采用基于规则或者基于成本的优化器.
1.2访问Table的方式
ORACLE 采用两种访问表中记录的方式: a. 全表扫描 全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描. b. 通过ROWID访问表 你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高. 例子: Select rowid name from prpcmaininvest;------100条大概0.16s(测试过) 比正常查询快了一半时间select name from prpcmaininvest; -------0.32s
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初步优化(一)
- Oracle 优化(一)
- Oracle bitmap 初步解析(一)
- oracle 优化步骤(一)
- Oracle SQL 优化(一)
- Oracle的操作符优化技术初步
- ORACLE SQL性能优化系列(一)
- ORACLE SQL性能优化系列(一)
- oracle sql 优化(摘一)
- oracle sql 优化(摘一)
- ORACLE SQL性能优化系列(一)
- ORACLE SQL性能优化(一)
- ORACLE SQL性能优化(一)
- Oracle SQL性能优化(一)
- oracle sql优化一(转载)
- oracle 基线与优化(一)
- Oracle SQL性能优化总结(一)
- oracle优化一
- DataGridView数据绑定控件---------按钮添加和事件触发总结
- SQL2005之try、catch,事物,存储过程(范例)
- contentsiz contentoffset contentInset的区别
- 关于JavaScript/jQuery事件冒泡
- attr函数
- oracle初步优化(一)
- Mongodb 源码分析--Replication之OpLog
- 禁用eclipse Web Browser
- 匹配汉字的正则表达式
- DataGridView 中指定的 单元格 不能编辑
- 实现AOP的功能的封装与配置
- BMP图像生成 纯C
- 《一位老工程师的忠告》
- 技术领袖的模式