网站首页 > 技术文章 正文
概述
Oracle数据库中的优化器又叫查询优化器(Query Optimizer)。它是SQL分析和执行的优化工具,它负责生成、制定SQL的执行计划。Oracle的优化器有两种,基于规则的优化器(RBO)与基于代价的优化器(CBO)
CBO是一种比RBO更加合理、可靠的优化器,它是从ORACLE 8中开始引入,但到ORACLE 9i 中才逐渐成熟,在ORACLE 10g中完全取代RBO, CBO是计算各种可能“执行计划”的“代价”,即COST,从中选用COST最低的执行方案,作为实际运行方案。它依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择。如果对一次执行SQL时发现涉及对象(表、索引等)没有被分析、统计过,那么ORACLE会采用一种叫做动态采样的技术,动态的收集表和索引上的一些数据信息。
针对CBO的计算方式有几个重要概念,下面简单说明下。
选择性selectivity
Selectivity :谓词的过滤条件返回的结果的行数占未加谓词过滤条件的行数
范围0-1,值越小,说明 选择性越好 返回的cardinality 越小;值越大,选择性越差,返回的cardinality 越大。
1、表的选择性
object_id 选择性 1/74895=0.000013352 选择性高---->适合B-tree 索引
owner 选择性 1/27=0.037037037 选择性低---->不适合B-tree 索引
geneated 选择性 1/2=0.5 选择性很低---->不适合B-tree 索引
2、索引的选择性
inx_t 的选择性 1/74895=0.000013352 选择性很好
ind_t_status 的选择性 1/2=0.5 选择性很不好
3、总结--B-TREE索引
高效的场景– 索引字段有着很高的selectivity或者结果集很小的时候
低效的场景– 索引字段有着很低的selectivity或者结果集很大的时候。
基数cardinality
cardinality代表在执行计划中表示每一步操作返回的记录数。CBO通过对这个值的权重计算,决定使用哪一种方式访问数据。
cardinality和成本是相关的,cardinality越大,执行步骤中的成本就越大。
Cardinality = num_of_blocks * (block_size - cache_layer) / avg_row_len
这里可以看到基数为98行。
【重要】:基数 = 记录数 * 选择率
索引---clustering factor
聚簇因子是基于表上索引列上的一个值,每一个索引都有一个聚簇因子。这是用于描述索引块上与表块上存储数据在顺序上的相似程度,也就说表上的数据行的存储顺序与索引列上顺序是否一致。
查看聚簇因子
select index_name,clustering_factor from user_index where table_name='T';
在全索引扫描中,CF的值基本上等同于物理I/O或块访问数,如果相同的块被连续读,则Oracle认为只需要1次物理I/O。
好的CF值接近于表上的块数,而差的CF值则接近于表上的行数。
聚簇因子在索引创建时就会通过表上存在的行以及索引块计算获得。
今天这里主要讲了三个重要概念:selectivity、cardinality和CF,可能比较少听到,不过还是建议理解下,对于优化还是很有帮助的。
后面会分享更多DBA方面内容,感兴趣的朋友可以关注下!
猜你喜欢
- 2025-07-09 Oracle数据库 常用函数(oracle函数用法)
- 2025-07-09 Oracle数据查询和操作策略:优化数据管理的秘籍
- 2025-07-09 oracle 查看参数和隐含参数(oracle查看sid)
- 2025-07-09 Oracle数据库中查询最前面的100条数据,三种方法对比
- 2024-10-16 数据库Oracle的安装及访问 oracle数据库安装视频教程
- 2024-10-16 Oracle数据库之高级查询二 oracle 高级
- 2024-10-16 Oracle数据库死锁查询 oracle数据库死锁处理方法
- 2024-10-16 Oracle——怎么查看执行计划 oracle查看执行计划详解
- 2024-10-16 详解六种方法查看oracle执行计划=》优化必备
- 2024-10-16 oracle数据库条件查询之本月之前 oracle查询当月的每一天
你 发表评论:
欢迎- 最近发表
-
- Three.js vs Unity:工业可视化为何选择Web方案?
- 一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI
- 时间线可视化实战:三款AI工具实测,手把手教你制作人生轨迹图
- 【推荐】一款可视化在线 Web 定时任务管理平台,支持秒级任务设置
- 重磅更新!FastDatasets 推出可视化 Web 界面
- 模具设计之UG钣金实例教程(3)_ug钣金基础教程
- 前端基于 RBAC 模型的权限管理实现
- 别再把JWT存在localStorage里了!2025年前端鉴权新思路
- 模具设计之曲面造型中不圆润的曲面如何处理技巧
- 9个专业级别的CSS技巧区分了解和精通的鸿沟
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)