Oracle 优化器内幕:CBO 基本公式与挑战
需积分: 10 178 浏览量
更新于2024-08-15
收藏 1.81MB PPT 举报
"Oracle 优化器内幕:基本公式与CBO解析"
在Oracle数据库中,优化器是决定SQL查询执行效率的关键组件。本资源主要探讨了Oracle Cost-Based Optimizer(CBO,基于成本的优化器)的工作原理以及基本的过滤条件因子公式。CBO根据表的统计信息和操作的成本来选择最优的执行计划。
CBO的核心是通过计算每个可能执行计划的成本来决定最佳路径。当涉及到无绑定变量(BIND VARIABLES)且无直方图(HISTOGRAMS)的情况时,对于不同的比较运算符,有特定的过滤因子公式:
1. 等值比较(c1 = value):使用列的密度(density)作为过滤因子,即`c1.density`。
2. LIKE 比较(c1 like value):使用列的密度(density)作为过滤因子。
3. 大于比较(c1 > value):计算 `(Hi - value) / (Hi - Lo)`,其中Hi和Lo分别是列的最大值和最小值。
4. 大于等于比较(c1 >= value):在大于的基础上加1除以列的唯一值数量(num_distinct),即`(Hi - value) / (Hi - Lo) + 1/c1.num_distinct`。
5. 小于比较(c1 < value):计算 `(value - Lo) / (Hi - Lo)`。
6. 小于等于比较(c1 <= value):在小于的基础上加1除以列的唯一值数量,即`(value - Lo) / (Hi - Lo) + 1/c1.num_distinct`。
7. BETWEEN 比较(c1 between val1 and val2):计算 `(val2 – val1) / (Hi - Lo) + 2 * 1/c1.num_distinct`。
这些公式适用于所有列值非NULL的情况。在考虑NULL值时,会有调整因子,例如等值比较的过滤因子会变为 `c1.density * (1 - num_nulls/num_rows)`,其中`num_nulls`是列中的NULL值数量,`num_rows`是行总数。
CBO的引入带来了新的挑战,因为它基于成本创建执行计划,这意味着DBA和开发人员需要深入理解CBO的工作机制,以便提供准确的统计信息并避免“Garbage in, Garbage out”现象,即输入的统计信息质量直接影响优化器选择的执行计划质量。执行计划不再是静态的,而是随着系统状态和数据变化而动态调整,这对高可用性环境提出了更高的要求。
此外,文档还提到了CBO的发展和变化,暗示了Oracle会不断改进其优化器性能,以应对日益复杂的查询需求和大数据量的挑战。因此,持续学习和理解CBO的最新发展至关重要,这对于提升数据库性能和SQL调优能力有着直接的影响。
2009-11-26 上传
2019-02-19 上传
2023-09-14 上传
2023-06-10 上传
2023-08-09 上传
2023-12-16 上传
2023-07-21 上传
2024-03-22 上传
清风杏田家居
- 粉丝: 21
- 资源: 2万+
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫