Oracle SQL编写优化总结《一》

本文探讨了Oracle数据库中优化器模式的选择及其对查询性能的影响,并介绍了Oracle访问表的两种主要路径:全表扫描与通过ROWID访问。

㈠ 选用合适的Oracle 优化器

缺省值:
9i默认是choose
10g默认是all_rows

     sys@EMREP> show parameter optimizer_mode
     
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     optimizer_mode                       string      ALL_ROWS




参数:

ALL_ROWS:倾向于用最少的资源获取最大的结果集,也就是整体效果最佳
FIRST_ROWS:倾向最快反应速度
COST:选择CBO
RULE:选择RBO
CHOOSE:如果表被analyze,则走CBO;否则,RBO

修改:

session级:
alter session set optimizer_mode=xx;
实例级:
在init<SID>.ora里面修改
或者
alter system set optimizer_mode=xx;

虽然有RBO,但仍然建议收集统计信息,使用CBO
这种实例级的参数修改要经过相对全面的测试才能应用到生产系统的,否则风险太大
现在很多中间件或者三层架构,还是用ALL_ROWS更加合理
如果运行的很好,别碰它,局部调整,别大面积收集统计信息,小心有问题
收集统计信息很多策略的,什么时候收集,收集比例多少,哪些要收集直方图等等,这不光和数据库有关系还和业务有关系,制定好的统计信息收集策略不是那么容易的



㈡ 访问表的路径

Oracle访问表有两种路径:
① 全表扫描

全表扫描就是顺序地访问表中的每条记录
Oracle采用一次读入多个数据块的方式优化全表扫描
对大表尽量避免产生全表扫描

② 通过ROWID访问

ROWID包含了表中记录的物理位置信息
Oracle采用index实现数据和rowid之间的联系
Index提供快速访问rowid的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值