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