选用适合的Oracle优化器Oracle的优化器共有3种:a
RULE(基于规则)b
COST(基于成本)c
CHOOSE(选择性)设置缺省的优化器,可以通过对init
ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS
你当然也在SQL句级或是会话(session)级对其进行覆盖
为了使用基于成本的优化器(CBO,Cost-BasedOptimizer),你必须经常运行analyze命令,以增加数据库中的对象统计信息(objectstatistics)的准确性
如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关
如果table已经被analyze过,优化器模式将自动成为CBO,反之,数据库将采用RULE形式的优化器
在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(fulltablescan),你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器
访问Table的方式Oracle采用两种访问表中记录的方式:a
全表扫描全表扫描就是顺序地访问表中每条记录
ORACLE采用一次读入多个数据块(databaseblock)的方式优化全表扫描
通过ROWID访问表你可以采用基于ROWID的访问方式情况,提高访问表的效率,ROWID包含了表中记录的物理位置信息……ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系
通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高
共享SQL语句为了不重复解析相同的SQL语句,在第一次解析之后,ORACLE将SQL语句存放在内存中
这块位于系统全局区域SGA(system