openGauss优化器是基于代价的优化(Cost-Based Optimization,简称CBO)。
客户价值
openGauss CBO优化器能够在众多计划中依据代价选出最高效的执行计划,最大限度的满足客户业务要求。
特性描述
在CBO优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、DISTINCT值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小、首元组返回代价最小的执行方式进行执行。
优化器是数据库内置的,作用是在SQL的解析阶段生成最优的执行计划,分为RBO和 CBO两种:
RBO是基于规则的优化器
◼ 根据表结构和SQL文本生成执行计划,不受表的数据的影响。
CBO是基于成本的优化器
◼ 根据统计信息生成执行计划。
RBO 优化器
⚫ 基于规则的优化器
优化器根据可用的访问路径和这些访问路径的等级选择执行计划,就是在优化器里面嵌入若干 种规则,执行的sql语句符合哪种规则,则按照哪种规则制订出相应的执行计划。
⚫ 规则主要分为以下几类:
索引选择
排序消除、MIN/MAX优化
连接顺序选择
子查询重写
条件重写
CBO 优化器
⚫ CBO优化器分为三个重要组成部分:
查询转换
◼ 对于某些语句,查询转换器将原始SQL重写为具有较低成本的等价SQL语句,并判断是否有效。
代价评估
◼ 用于确定给定执行计划的总体成本。
执行计划生成
◼ 通过尝试不同的访问路径,连接方法和连接顺序来探索SQL的各种可选执行计划。
⚫ CBO优化器评估执行代价依赖于统计信息,数据库根据表的元组数、字段宽度、NULL记 录比率、distinct值、MCV值等表的特征值,以及一定的代价计算模型,计算出每一个执 行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小/ 首元组返回代价最小的执行方式进行执行。
⚫ 使用CBO时,必须保证为表和相关的索引搜集足够的统计数据。对数据经常有增、删、 改的表最好定期对表和索引进行分析。
⚫ 数据库掌握了充分反映实际的统计数据,才有可能做出正确的选择。




