加载中...

基于代价的优化器(Cost-Based Optimizer,CBO)为每个候选执行计划建立代价模型,综合估算 I/O、CPU、内存乃至网络开销,选择估计代价最低的计划执行。其思想源于 IBM System R 项目提出的经典优化框架。
CBO 依赖三要素:统计信息(表行数、列的基数、直方图、索引信息)、基数估计(推算每个算子的输出行数)和代价公式(把行数与访问方式换算成代价值)。优化器据此在访问路径、连接算法与连接顺序构成的巨大搜索空间中,用动态规划或启发式方法搜索较优计划。
优点是能随数据分布变化自适应地调整计划,对复杂查询远优于固定规则;缺点是强依赖统计信息的准确性,统计过期或基数估计偏差会导致选错计划,产生执行计划突变等问题。
Oracle 自 10g 起全面转向 CBO,MySQL、PostgreSQL、SQL Server 及各类分布式数据库、大数据引擎(如 Spark SQL 的 CBO)均采用该模式,通常辅以 Hint 机制供人工干预。

登录 后参与讨论
暂无讨论,来发表第一条评论吧