• 老毕
    2019-08-25
    1. RBO 和 CBO 各自的特点是怎样的呢?

    RBO和CBO都基于规则,RBO使用静态规则,CBO使用动态规则。

    RBO的输出可以预期,稳定的输入得到稳定的输出。

    CBO的输出并不稳定,由很多不断改变的参数共同调节。

    2. 为什么 CBO 也存在不足?

    Cost Based有双关含义,一是它基于物理成本来考量执行计划,二是它自身就会消耗很大成本。

    CBO由很多参数共同决定,系统需要不断地调节它们,尽量保持其准确性。

    如果某些参数未能及时调整,不能如实表达其所代表的物理特性,会使得CBO发生误判。

    为了减少误判,必须消耗一定的系统资源,用于频繁地收集和计算各项参数。

    CBO的优势也恰恰就是它的不足,充分理解CBO,对实际工作很有帮助。
    展开

    作者回复: 对的,充分理解CBO,对实际工作很有帮助。

    
     9
  • 许童童
    2019-08-23
    RBO 和 CBO 各自的特点是怎样的呢?
    RBO基于规则,每条sql经过RBO优化出来的结果都是固定的。
    CBO基于代价,根据统计信息,配置参数,优化器参数,sql经过优化出来的结果不是固定的,有点类似利用统计学得到最佳的优化结果。

    为什么 CBO 也存在不足?
    CBO比较复杂,任何一个参数没有调好,可能优化结果都不理想,还有就是统计信息的准确度,如果要很高的准确度,那么修护这个高准确度带到的代价也是很大的。
    展开

    作者回复: 对的,一个基于规则,一个基于数据。数据虽好,但也存在数据准确度,计算代价的限制

    
     4
  • 小白鼠丶
    2019-09-11
    我想问下在什么情况下IO会很高

    作者回复: IO高,可以考虑:数据没有缓存,读写频繁,写日志是否过多,磁盘是否已满,数据库连接数是否超限制等

    
     1
  • 一步
    2019-08-24
    去查看 server_cost 的表中的记录,为什么看不到每个操作的 cost 的默认值呢? 没有 default_value 那一列

    mysql 的版本:5.17。18
    
     1
  • 爬行的蜗牛
    2019-12-22
    RBO 基于现有规则,静态的;
    CBO 是基于动态的规则, 可以调整;
    CBO 由于是动态的, 当物理资源的配置发生变化, 比如磁盘从sata 盘更换成固态硬盘, 那么响应的参数需要调整, 调整到多少合理就要在实践中摸索。

    作者回复: 总结的很好

    
    
  • 雪飞鸿
    2019-11-25
    每一种解决问题的方式都有其代价,要考虑成本和收益问题

    作者回复: 对的 任何事情都要balance,尤其是在工程领域,更需要

    
    
  • 书痕
    2019-11-06
    1. RBO 和 CBO分别对应经验驱动和数据驱动,也可类比于于工厂化生产与手动定制。前者快但比较粗糙,后者精准但需要复杂计算。
    2. CBO因为要对大量参数进行计算,因此难免出现偏差,且数据量少的情况下,优化的成本过高(优化还不如不优化)。

    作者回复: 对 这样比喻不错

    
    
  • Yuhui
    2019-09-27
    请教一下老师:“执行计划就是查询树,它由一系列物理操作符组成”这句话怎么理解?谢谢!

    作者回复: 这些操作符按一定的运算关系组成查询计划(查询的执行方案),比如两个数据表A和B进行连接,在优化器内部会存在嵌套循环连接,归并连接,Hash连接 三种物理连接方式。同样A,B,C三张表进行联查,也存在连接顺序的问题。所以具体的查询计划,是由物理操作符组成的树形结构

    
    
  • 空知
    2019-09-01
    CBO 做搜索空间的剪枝 是不考虑全部可能的意思吗?
    
    
  • leslie
    2019-08-25
    其实不同数据库这块其实都是不一样的:尤其是在查询优化器中各自都加了自己的特性在里面,虽然我们很多时候发现执行语句类似;可是还是不同的。
          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组复制技术

    
    
  • ttttt
    2019-08-23
    CBO会根据代价评估模型,计算每条可能的执行计划的代价,对于复杂的数据情况,评估模型时会导致开销过大。
    
    
  • Cue
    2019-08-23
    老师,专栏会有mysql触发器的部分吗
    
    
  • Demon.Lee
    2019-08-23
    这里对内存代价和远程代价不进行讲解,我们只需要关注 I/O 代价和 CPU 代价即可。
    ——不讲解,是因为很复杂吗?

    作者回复: IO代价和CPU代价在总代价中占比高,因为我们通常会做大量的IO操作,以及内存中的查找比较。Memory代价指的是内存拷贝代价。另外Memory和Remote代价系统会自动帮计算,而IO和CPU代价(内存中的查找代价)是我们进行成本估算中更关注的

    
    
我们在线,来聊聊吧