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
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/