32丨查询优化器是如何工作的?
该思维导图由 AI 生成,仅供参考
什么是查询优化器
- 深入了解
- 翻译
- 解释
- 总结
查询优化器是数据库中的重要组件,通过逻辑查询优化和物理查询优化两个阶段生成最佳执行计划,提高SQL查询性能。逻辑查询优化通过等价变换、查询重写和索引优化提升查询效率。基于代价的优化器根据代价评估模型计算执行计划代价,选择最小代价执行计划。CBO利用数据表统计信息制定执行计划,可通过调整代价模型参数优化执行计划。MySQL5.7版本后代价模型完善,考虑I/O、CPU、内存和远程操作代价。查询优化器经历逻辑和物理查询优化,CBO计算总代价复杂,细节多,不同优化器实现方式不同。RBO和CBO各有特点,CBO存在统计信息不准确、参数配置偏差等缺陷。查询优化器需平衡优化时间和执行计划质量,CBO剪枝搜索空间以找到“最优”执行计划。文章提出思考题,鼓励读者思考和分享学习。
《SQL 必知必会》,新⼈⾸单¥68
全部留言(19)
- 最新
- 精选
- DZ1. RBO 和 CBO 各自的特点是怎样的呢? RBO和CBO都基于规则,RBO使用静态规则,CBO使用动态规则。 RBO的输出可以预期,稳定的输入得到稳定的输出。 CBO的输出并不稳定,由很多不断改变的参数共同调节。 2. 为什么 CBO 也存在不足? Cost Based有双关含义,一是它基于物理成本来考量执行计划,二是它自身就会消耗很大成本。 CBO由很多参数共同决定,系统需要不断地调节它们,尽量保持其准确性。 如果某些参数未能及时调整,不能如实表达其所代表的物理特性,会使得CBO发生误判。 为了减少误判,必须消耗一定的系统资源,用于频繁地收集和计算各项参数。 CBO的优势也恰恰就是它的不足,充分理解CBO,对实际工作很有帮助。
作者回复: 对的,充分理解CBO,对实际工作很有帮助。
2019-08-2546 - 许童童RBO 和 CBO 各自的特点是怎样的呢? RBO基于规则,每条sql经过RBO优化出来的结果都是固定的。 CBO基于代价,根据统计信息,配置参数,优化器参数,sql经过优化出来的结果不是固定的,有点类似利用统计学得到最佳的优化结果。 为什么 CBO 也存在不足? CBO比较复杂,任何一个参数没有调好,可能优化结果都不理想,还有就是统计信息的准确度,如果要很高的准确度,那么修护这个高准确度带到的代价也是很大的。
作者回复: 对的,一个基于规则,一个基于数据。数据虽好,但也存在数据准确度,计算代价的限制
2019-08-2315 - 爬行的蜗牛RBO 基于现有规则,静态的; CBO 是基于动态的规则, 可以调整; CBO 由于是动态的, 当物理资源的配置发生变化, 比如磁盘从sata 盘更换成固态硬盘, 那么响应的参数需要调整, 调整到多少合理就要在实践中摸索。
作者回复: 总结的很好
2019-12-228 - 书痕1. RBO 和 CBO分别对应经验驱动和数据驱动,也可类比于于工厂化生产与手动定制。前者快但比较粗糙,后者精准但需要复杂计算。 2. CBO因为要对大量参数进行计算,因此难免出现偏差,且数据量少的情况下,优化的成本过高(优化还不如不优化)。
作者回复: 对 这样比喻不错
2019-11-066 - Demon.Lee这里对内存代价和远程代价不进行讲解,我们只需要关注 I/O 代价和 CPU 代价即可。 ——不讲解,是因为很复杂吗?
作者回复: IO代价和CPU代价在总代价中占比高,因为我们通常会做大量的IO操作,以及内存中的查找比较。Memory代价指的是内存拷贝代价。另外Memory和Remote代价系统会自动帮计算,而IO和CPU代价(内存中的查找代价)是我们进行成本估算中更关注的
2019-08-236 - 小白鼠丶我想问下在什么情况下IO会很高
作者回复: IO高,可以考虑:数据没有缓存,读写频繁,写日志是否过多,磁盘是否已满,数据库连接数是否超限制等
2019-09-115 - 雪飞鸿每一种解决问题的方式都有其代价,要考虑成本和收益问题
作者回复: 对的 任何事情都要balance,尤其是在工程领域,更需要
2019-11-253 - leslie其实不同数据库这块其实都是不一样的:尤其是在查询优化器中各自都加了自己的特性在里面,虽然我们很多时候发现执行语句类似;可是还是不同的。 sql server和mysql早期接近一点,可是后面随着oracle对其兼并之后会明显的发现完全就变成属于oracle的小弟的感觉。这种关系就像微软有sql server和Access,甲骨文有oracle和mysql;当然非商业版的MariaDB还是比较保持了原生态的东西。5.7没有看。 mysql不像老师说的那样吧,尤其是5.7之前多种表引擎,不同引擎有不同的特性其实还是有些不同的;只使用一种表引擎是5.7才开始的;目前市面主流依然停留在5.6吧,国内各大云厂商自推的基于MYSQL的都是基于5.6.
作者回复: 8.0逐渐火起来了,尤其是提供了MGR组复制技术
2019-08-253 - Yuhui请教一下老师:“执行计划就是查询树,它由一系列物理操作符组成”这句话怎么理解?谢谢!
作者回复: 这些操作符按一定的运算关系组成查询计划(查询的执行方案),比如两个数据表A和B进行连接,在优化器内部会存在嵌套循环连接,归并连接,Hash连接 三种物理连接方式。同样A,B,C三张表进行联查,也存在连接顺序的问题。所以具体的查询计划,是由物理操作符组成的树形结构
2019-09-272 - 学渣汪在央企打怪升级概念性东西太多了。。不过赞一个,适合我这种小白
作者回复: 加油~
2020-03-26