1、前言
CBO是 Cost-based optimizer ,RBO是 Rule-based optimizer 。
2、对比
CBO | RBO | |
定义 | 基于成本的优化 | 基于规则的优化 |
目的 | 为每个SQL语句提供最便宜的执行计划 | RBO使用一组规则来确定如何执行查询 |
支持 | Spark sql、Hive、Presto、Mysql 、Oracle和SQL Server | 几乎所有都支持 |
实现难度 | 实现困难,以空间换时间 | 实现容易,但是以时间换空间 |
附1:Spark 的 TPC-DS 查询性能测试对比
附2:Hive 的 TPC-DS 查询性能测试对比
3、注意
Hive CBO 支持的版本:从 Hive-0.14 开始支持,开启参数----> hive.cbo.enable=true
Spark CBO 支持的版本:从 Spark -2.2.0 开始支持,开启参数---> spark.sql.cbo.enabled=true
扫描二维码关注公众号,回复:
8586238 查看本文章
4、参考
- http://www.dba-oracle.com/t_gogala_cbo_oltp1.htm
- http://www.oratable.com/oracle-cbo-rbo/
- https://nirajrules.wordpress.com/2009/06/10/cost-based-optimization-cbo-vs-rule-based-optimization-rbo/
- https://zh.hortonworks.com/blog/hive-0-14-cost-based-optimizer-cbo-technical-overview/
- Spark CBO 介绍https://docs.databricks.com/spark/latest/spark-sql/cbo.html
- 传统CBO介绍:http://hbasefly.com/2017/05/04/bigdata%EF%BC%8Dcbo/?nedkjs=truzu1
- Apache calcite 优化器:https://matt33.com/2019/03/17/apache-calcite-planner/
- Apache Hive SQL 名词:http://dwgeek.com/apache-hive-explain-command-example.html/