Oracle优化建议

 

 

1.少用in操作字符

2.not exists 或者外连接替代not in

    无法使用索引

3.不用<>或!=

    对全表进行了扫描,无法使用索引

4.设计表,把索引设置为not null.

    判断为空无法应用索引,b树索引不索引空值

5.不用'%'和 '_'作为第一个操作符.

    无法使用索引,且对表进行全表扫描

6.where子句中避免在索引列上使用计算.

       若索引不是基于函数的,那么当where子句中对索引使用函数时,索引无效,

        因此,where子句中避免使用计算.

7.用>=替代>

A>2 A>=3  查出2的索引,和查出3的索引.查2是多余的.

 

oracle 数据库常用的两种优化器: RBO (rule-based-optimizer) 和 CBO(cost-based-optimizer)。

目前更多地采用 CBO(cost-based-optimizer)基于开销的优化器。在 CBO 方式下,Oracle 会

根据表及索引的状态信息来选择计划; 在 RBO 方式下, Oracle 会根据自己内部设置的一些

Oracle 教程

 

规则来决定选择计划,例如 oracle 会根据以下优先级来选择执行计划(越靠前,rank 越低,

越快)

 

8.利用SGA共享池,避开parse阶段.

    ORACLE 对每个 SQL 都会对其进行一次分析,并且占用共享内存,建议经常使用变量来代替常量,

以尽量使用重复 sql 代码,以利用 SGA 共享池,避开 parse 阶段,防止相同的 Sql 语句被

多次分析,提高执行速度。因此使用存储过程,是一种很有效的提高 share pool 共享率,跳过 parse 阶段,提高效率的

办法。 

 

9.WHERE子句查询条数顺序应从大到小.

 

10.使用表的别名,作为每列的前缀.

    减少解析时间.

11.进行显式或隐式运算的字段不能进行索引.

    隐式(to_number(),to_char(),to_date())

12.使用union all 替代union

      union all 不排除重复行

13.尽量使用packages,第一次调用load进内存,对提高性能有帮助.

    使用cached sequences来生成primary key;提高主键的生成速度和使用性能.

    很好的利用空间: varchar2替代char

    sql优化工具.sqlexpert, toad, explain-table,PL/SQL;OEM

14.改变oracle的SGA的大小.

    SGA:数据库的系统全局区.

    SGA=共享池+数据缓冲区+日志缓冲区

posted @ 2017-04-11 13:57  FoxLegend  阅读(454)  评论(0编辑  收藏  举报