Oracle优化器详解,通宵整理,透彻超详细
作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验
B站主播Oracle、Mysql、PG实战课程,请搜索:jeames007擅长Oracle数据库运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
一、 什么是优化器
优化器是 SQL 分析和执行的优化工具,他负责制定 SQL 的执行计划,比如什么时候是全表扫描(FTS full table scan),什么时候是索引范围搜索(Index Range
Scan),或者是全索引扫描(INDEX fast full scan,INDEX_FFS);
如果是表于表之间连接的时候,它会负责去定表之间以一种什么样子的形式来关联,
比如 HASH_JOIN 还是 NESTED LOOPS 或者是 MERGE JOIN。
这些因素直接决定了 SQL 的执行效率,所以优化器是 SQL 执行的核心!!!
注释:SQL 执行一定会有代价。
二、 优化器的种类
Rule Based Optimizer(RBO)基于规则,一套死板的规则来控制数据访问
Cost Based Optimizer(CBO)基于成本,或者讲统计信息,依据一套数据模型,
计算数据访问和处理的成本,选择最优成本作为执行方案CBO 方式:它是看语句的代价(Cost),这里的代价主要指 Cpu 和内存。
优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。
统计信息给出表的大小、有少行、每行的长度等信息。
这些统计信息起初在库内是没有的,是做完收集统计信息后才出现的,
很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息。注意:走索引不一定就是优的,比如一个表只有两行数据,
一次 IO 就可以完成全表的检索,而此时走索引时则需要两次 IO,
这时全表扫描(full table scan)是最好。
三、CBO优化器的结构
CBO包含以下组件:查询转换器、评估器、计划生成器
3.1 查询转换器
改变查询语句的形式,以产生较好的执行计划
例如:绑定变量虽然可以有效的减少“硬分析”,Oracle只允许第一次调用时进行“窥视”,
接下来的调用即使绑定变量的值发生了变化,也仍然是使用第一次生成的执行计划
3.2 评估器
通过计算三个值来评估计划的总体成本(累加):
选择性(Selectivity 0-1之间)
基数(Cardinality)
成本(Cost)
3.3 计划生成器
计划生成器的作用就是生成大量的执行计划,然后选择其中总体成本最低的一个
如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持
您的批评指正是我写作的最大动力!
❤️ 技术交流可以 关注公众号:IT邦德 ❤️
Oracle优化器详解,通宵整理,透彻超详细相关推荐
- 深度学习各类优化器详解(动量、NAG、adam、Adagrad、adadelta、RMSprop、adaMax、Nadam、AMSGrad)
深度学习梯度更新各类优化器详细介绍 文章目录 <center>深度学习梯度更新各类优化器详细介绍 一.前言: 二.梯度下降变形形式 1.批量归一化(BGD) 2.随机梯度下降(SGD) 3 ...
- pytorch优化器详解:Adam
目录 说明 Adam原理 梯度滑动平均 偏差纠正 Adam计算过程 pytorch Adam参数 params lr betas eps weight_decay amsgrad 说明 模型每次反向传 ...
- pytorch优化器详解:SGD
目录 说明 SGD参数 params lr momentum dampening weight_decay nesterov 举例(nesterov为False) 第1轮迭代 第2轮迭代 说明 模型每 ...
- 【深度学习】优化器详解
优化器 深度学习模型通过引入损失函数,用来计算目标预测的错误程度.根据损失函数计算得到的误差结果,需要对模型参数(即权重和偏差)进行很小的更改,以期减少预测错误.但问题是如何知道何时应更改参数,如果要 ...
- pytorch优化器详解:RMSProp
说明 模型每次反向传导都会给各个可学习参数p计算出一个偏导数,用于更新对应的参数p.通常偏导数不会直接作用到对应的可学习参数p上,而是通过优化器做一下处理,得到一个新的值,处理过程用函数F表示(不同的 ...
- 复杂网络入门详解 适用于初学者。超详细~~
一复杂网络的特性 1.复杂网络的特性之------小世界特性: (1)社交网络中任何一个成员和任何一个认识的人之间的间隔人数不会超过六个人.即通过小于六个人,总能找到社交网络中任何一个成员. (2)小 ...
- [linux]四、详解vim编辑器(超详细)
目录 1.vim编辑器是linux里的文本编辑器. 1.1.vi和vim的区别在哪里 1.2.linux里编辑的文本在windows里是否可以打开 1.3.为什么有乱码? 1.4.查看linux里的文 ...
- 【数据挖掘】聚类趋势估计、簇数确定、质量测定等评估方法详解(图文解释 超详细)
需要PPT和源码请点赞关注收藏后评论区留言私信~~~ 聚类评估用于对在数据集上进行聚类的可行性和被聚类方法产生的结果的质量进行评估.聚类评估主要包括以下任务 估计聚类趋势 对于给定的数据集 聚类趋势估 ...
- 一篇带你详解static关键字(超详细)
文章目录 前言 一.static可以修饰哪些东西? 二.static修饰属性 1.为什么要引入static? 2.final和static的区别 3.修饰属性总结 二.static修饰方法 2.1为什 ...
- java多线程使用详解与案例,超详细
文章目录 线程lamda表达式方式启动(简单.常用) java使用多线程的三种方式: 继承Thread 实现Runnable 实现Callable 线程池的使用: 守护线程: 使用lamda表达式简化 ...
最新文章
- 如何防止android app被误删除,如何避免手机清理缓存时误删了重要文件【注意事项】...
- Kraken:使用精确比对的超快速宏基因组序列分类软件
- NFS配置全新设置常用参数说明
- 架构无小事:QQ碰微信 贴吧遇微博
- Java 洛谷 P1307 数字反转
- 配置exchange 2010高可用群集服务(dag)
- 使用VM Tools让VMware虚拟机里的ubuntu能够共享Windows系统的文件夹
- 单片机开发与Linux开发有何不同?
- hive数据库numeric_hive中常用的函数
- 二叉树先序,中序,后序,层次遍历(数据结构)
- docker -v 覆盖了容器中的文件_Docker容器之安装Mysql
- html 图片移动动画,HTML5移动端图片左右切换动画DEMO演示
- Forrester:工业4.0 中国制造企业用ICT换来改变
- Android 中的线程池
- 进入第一个Android应用界面
- eclipse配置java开发环境_Java中Eclipse开发环境配置
- 智慧城市——数字化城市管理平台系统建设方案
- 银行开发专业术语解释和银行系统开发架构的设计思想
- D3DXCreateTextureFromFileEx创建纹理的悲催
- 初学编程者必知的五个网站