ITPub博客

首页 > 数据库 > Oracle > Oracle,MySQL等库CBO缺陷

Oracle,MySQL等库CBO缺陷

原创 Oracle 作者:dingjun123 时间:2026-05-16 22:56:38 0 删除 编辑

三大库CBO优化器缺点: 1.CBO无法深度理解业务,SQL写法还是很重要。SQL是关系代数语言,CBO优化器只是从关系代数角度进行优化,包括查询重写,物理执行计划生成,但是无法理解真正的业务,比如a条件满足则有b条件,b条件选择性更好有索引,这个优化器不知道,必须手动添加,所以,有时候理解业务内在联系,也很重要。 像O有启发式和CBQT查询转换,可以干很多复杂SQL查询重写,会让开发误认为SQL写法不太重要,一切换到MySQL,PG,国产库就不适应。 2.统计信息不一定反应真实数据分布。统计信息不一定能实时更新,比如O,能实时更新的收集比例少,比如PG和MySQL 。所以,他们都有缺陷。 另外O的统计信息最丰富,PG次之,MySQL默认只有表和索引列的,不完善。所以,PG,MYSQL虽然统计信息实时更新,但是收集比例少,可能存在不准的地方,特别是ndv和直方图。 3.复杂条件选择率计算不准。 比如函数运算导致只能用默认选择率,O的直方图和绑定变量很难自适应执行计划,得用bind_aware,或者值少可以写字面量等。 还有扩展列,组合关系等,不能自动,虽然O有sql directive,但是PG不行,MySQL没有扩展列统计信息。 4.CBO的公式计算科学性 O最强,但是也有缺陷,比如join cardinality公式计算,遇到倾斜的可能也不准。 PG次之,MySQL的COST计算公式很不科学,不严格 5.默认选择率不准问题 O的默认选择率一般偏小,索引的0.004,范围的5%,MySQL的偏大,比如等值10%,单区间范围1/3,双区间1/9,PG的不等于33%,范围0.5%,不一定符合实际情况 6.join reorder搜索算法问题 O基本以线性规划和启发式cut off,因为有shared pool和pga的cache,可以软解析和软软解析,如果统计信息和选择率计算准,找到的计划比较准,可以干复杂SQL优化。 7.查询转换能力 ORACLE有heuristic和CBQT,PG和MySQL主要是heuristic,对于OR expansion,JPPD,CVM等查询转换很弱 8.算子能力 O最强,PG的not in子查询不能unnest,PG的subquery cache没有,PG的sort merge只支持等值,MySQL的HASH JOIN不严格,不是等值的也行但是效率不高,MySQL没有SORT MERGE JOIN... 但是MySQL基本硬解析,不能干复杂的,表多会用贪心算法,PG一样,他们都有对应的optimize搜索空间和搜索深度的限制,基本在10个表内,实际上MySQL最好不要超过三个表JOIN。 综上所述,CBO优化器还不够智能,虽然O有很多adaptive功能,但是还是存在问题,特别是业务理解上,这个优化器很难做到。PG和MySQL偏弱,对于CBQT比较缺乏,比如cvm,or展开等功能没有。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7655508/viewspace-3146067/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-07

  • 博文量
    45
  • 访问量
    90557