Oracle优化器(RBO与CBO)
来源:互联网 发布:美发上门服务app软件 编辑:程序博客网 时间:2024/05/17 18:26
分类:
基于规则的优化器(RBO)和基于代价的优化器(CBO)。
在8i之前,Oracle使用的是RBO(Rule Based Optimizer,基于规则的优化器),
RBO:
执行简单,在优化器里面嵌入15种规则,执行SQL语句符合哪种规则,就按照规则定制出相应的SQL执行计划。由于它是一种过时呆板的优化器,在10g以后的版本中已经被踢出掉了。
从8i开始,Oracle引入了CBO(Cost Based Optimizer,基于代价的优化器),
CBO:
思路是让Oracle获取所有的执行计划的相关信息,通过这些信息做计算分析,最后得出一个代价最小的执行计划作为最终的执行计划。
CBO优化器有两种可选的运行模式:FIRST_ROWS(n) 和ALL_ROWS
FIRST_ROWS(n):
当设置优化器模式为FIRST_ROWS(n)时,意味着Oracle在执行SQL语句时,优先考虑将结果集中的前n条记录以最快的速度反馈回来,而其他结果并不需要同事反馈,也就是说在处理数据的时候,后面的数据可能还没提取出来,前面的数据已经返回给用户了,这种需求在网站搜索或者BBS的分页上经常看到。
比如每次只显示查询信息的前20条,这时设置FIRST_ROWS(20)就非常合适。对于分页操作,越靠前的页,显示结果需要的时间将越短。
下面举一个典型的分页的例子:
idle> select /*+first_rows(10)*/ b.x,b.y
2 from (select/*+first_rows(10)*/ a.*,rownum
3 from (select /*+first_rows(10)*/from t order by x) a
4 where rownum<=20) b
5 where rownum>=10;
需要注意的是排序使用的X必须创建有索引,否则CBO会忽略FIRST_ROWS(n)而使用ALL_ROWS.
ALL_ROWS:
当设置优化器模式为ALL_ROWS时,意味着我们需要Oracle以最快的速度将SQL执行完毕,将结果集全部返回。
ALL_ROWS在OLAP系统中使用的比较多,它的目的在于快速获取执行结果的最后一条记录。
(OLAP:联机分析处理(OLAP)系统是数据仓库系统最主要的应用,专门设计用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持,可以根据分析人员的要求快速、灵活地进行大数据量的复杂查询处理,并且以一种直观而易懂的形式将查询结果提供给决策人员,以便他们准确掌握企业(公司)的经营状况,了解对象的需求,制定正确的方案。)
区别:
ALL_ROWS强调整体的执行效率
FIRST_ROWS(n)强调以最快的速度返回前n条记录。
修改优化器模式:
alter system set optimizer_mode=all_rowsscope=both;
- Oracle优化器(RBO与CBO)
- Oracle优化器(RBO与CBO)
- Oracle优化器(RBO与CBO)
- Oracle优化器(RBO与CBO)
- ORACLE优化器之RBO与CBO
- Oracle 优化器(RBO,CBO)
- ORACLE优化器RBO与CBO介绍总结
- ORACLE优化器RBO与CBO介绍总结
- ORACLE优化器RBO与CBO介绍总结
- ORACLE优化器RBO与CBO介绍总结
- ORACLE优化器RBO与CBO介绍总结
- 【DB.Oracle】Oracle 优化器 (RBO, CBO)
- Oracle CBO 与 RBO
- Oracle CBO 与 RBO
- Oracle CBO 与 RBO
- Oracle CBO 与 RBO
- Oracle CBO 与 RBO
- Oracle优化器介绍(RBO/CBO)和用法
- 使用文本做缓冲
- 【Android】从源码角度看Handler机制
- 蓝桥杯-三人年龄
- python pandas numpy matplotlib 常用方法及函数 转载▼ import numpy as np import pandas as pd import matplotlib
- Tomcat学习总结(17)—— Tomcat生产环境中域名访问和连接MySQL
- Oracle优化器(RBO与CBO)
- Excel中一次性插入多行
- js计算文件MD5值
- CSS扩展
- Android极光推送之Unity和Eclipse的对接
- 防火墙管理器一:firewalld
- web项目接入cas单点登陆
- Django 中的urls 导入
- 【网络】基于标签的LPA算法的python3版本