频道栏目
首页 > 数据库 > Oracle > 正文
oracle cbo方式下优化模式的选择
2011-08-29 13:40:41           
收藏   我要投稿

通常对于一种功能单一的数据库来讲,在实例级设置一个优化器模式就可以了,
比如对于OLAP系统,绝大多数时候数据库上运行着的是报表作业,执行基本上是聚合类的SQL操作,
如GROUP BY,这时候,把优化器模式设置成all_rows是恰当的。
而对于一些分页操作比较多的网站类数据库,设置成first_rows会更好一些。
假设我们的数据库上运行着的基本上是一个OLAP系统,所以优化器模式设置为ALL_ROWS,这有利于报表SQL的快速完成。
但数据库上还运行着一些用户查询的业务,查询的方式可以说成是分页的。有时候就会出现用户抱怨查询慢的问题,
尽管我们知道问题所在,却比较难解决,因为这些SQL已经被开发人员写到代码里面了。
针对这种情况,如果能在开发阶段就考虑到这个问题,针对需要分页操作的SQL,开发人员在SQL里通过Hint的方式来将优化模式转换成FIRST_ROWS,这样就可以大大地提高数据的处理速度。
比如这样一个每次取出10条记录的分页查询:
Select * from (SELECT /*+ first_rows(10) */ a.*,rownum rnum from (SELECT /*+ first_rows(10) */ id,name from t1 order by id) a Where rownum=1;
可以在每个子查询中重复使用FIRST_ROWS(n)来提高查询效率。
尽管说在SQL中人为地加入Hint操作不是一个好主意,但是有些时候,比如需要兼顾其他的用户操作时,可以考虑做这样的设定。
但前期需要做一些测试工作,以确保这样的设定能够带来性能上的提高,同时不会对数据库造成其他方面的影响。这是系统设计阶段应该仔细考虑好的一个问题。

 

本文出自“风中一叶”

点击复制链接 与好友分享!回本站首页
相关TAG标签 模式 方式
上一篇:oracle rbo cbo sql优化器
下一篇:oracle优化器
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站