Oracle_SQL编程优化__报告

来源:互联网 发布:简易平面广告制作软件 编辑:程序博客网 时间:2024/05/18 20:09
 

优化规则:

1 RBO:基于规则优化

   遵循的是Oracle内部预定的一些规则,譬如查询走索引等 

2 CBO:基于成本优化

ALL_ROWS为默认的优化方法,是以数据的吞吐量为主要目标,以便可以使用最少的资源完成语句。
FIRST_ROWS为第二种优化方法,是以数据的响应时间为主要目标,以便快速查询出开始的几行数据。

3 CHOOSE:选择性

实际的优化器模式将和是否运行过analyze命令有关. 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器. 

访问table的方式:

ORACLE 采用两种访问表中记录的方式: 

a. 全表扫描 
全表扫描就是顺序地访问表中每条记录. ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描. 

b. 通过ROWID访问表 
可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高. 

内部函数提高处理效率:

Decode函数:DECODE(col/expression, search1, result1 

          [, search2, result2,...,]

          [, default])

NVL

使用commit:

只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:

COMMIT所释放的资源: 
a. 回滚段上用于恢复数据的信息. 
b. 被程序语句获得的锁 
c. redo log buffer 中的空间 
d. ORACLE为管理上述3种资源中的内部花费

用where替代having子句

用exsits替代in/distinct

用表连接替代exsits

使用显示的游标;

建立索引,常用规则:

1、表的主键、外键必须有索引;
2、数据量超过700的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;

基于索引的优化方法:

A. 不要在一张表上建立太多的索引

    过多的索引会影响插入,更新等,带来资源额外开销过多

B. 不要对索引列进行操作

 如 where to_char(expdate) > ‘20071201’

    应修改为        where expdate>   to_date(‘20071201’,’yyyymmdd’)

C. 特定的条件下强制某些索引失效

    如  where exptype||’’ > ‘1’

D. 增加查询的范围限制  

 将 >3 替换为 >=4

E.尽量去掉“IN”、“OR”  、“<>”   

F.like子句尽量前端匹配 

    后端匹配和中间匹配将不使用索引

G.用Case语句合并多重扫描 

H.使用nls_date_format 

alter session set nls_date_formate=’MM’;

建立分区表 :

分区表是按照特定方式逻辑划分大表,最终将其数据部署到几个相对较小的分区段中。执行SQL语句访问分区表时,服务器进程可以直接访问某个分区段,而不需要访问整张表的所有数据,从而降低磁盘I/O,提高系统性能。

原创粉丝点击