ShanTianQi

SQL查询优化器浅析 | 青训营笔记

SQL查询优化器浅析


1.1大数据体系和SQL


大数据体系中的SQL

分析引擎:

SQL的处理流程

一、Parser

String -> AST(Abstract Syntax Tree):抽象语法树

实现:递归下降(ClickHouse),Flex和Bison(PostgreSQL),JavaCC(Flink),Antlr(Presto,Spark)

二、Analyzer和Logical Plan

Analyzer

Logical Plan

逻辑优化阶段对逻辑计划应用标准的基于规则的优化,这些规则包括常量合并、谓词下推、列裁切、布尔表达式简化等。

tips:查询优化

SQL只是声明式语言,用户只描述做什么,没有告诉数据库怎么做,目标:找到一个正确且执行代价最小的物理执行计划。

三、Physical Plan和Executor

Physical Plan

执行计划子树

Executor

总结:One SQL rules big data all


1.2常见的查询优化器


一、查询优化器的分类

Top-down Optimizer

Bottom-up Optimizer

Rule-based Optimizer(RBO)

基于规则的优化器

Cost-based Optimizer(CBO)

基于代价的优化器

二、RBO

关系代数

优化原则

1.列裁剪:类似剪枝思想,把不用的列减去,减少参与的数据量

2.谓词下推:把类似><=≠之类的条件下推,减少数据量

3.传递闭包:创建新谓词,下推,减少数据量

4.Runtime Filter:通过在join的probe端提前过滤掉那些不会命中join的输入数据来大幅减少join中的数据传输和计算,从而减少整体的执行时间

小结

三、CBO

概念

使用一个模型估算执行计划的代价,选择代价最小的执行计划

算子代价:CPU、内存、磁盘I/O,网络I/O等代价

统计信息

原始表统计信息

推导统计信息

tips:准确的cardinality,远比代价模型本身重要。

统计信息的收集方式

统计信息推导规则

假设列和列之间是独立的,列的值是均匀分布

Filter Selectivity

问题

假设经常与现实不符:列与列之间不独立

执行计划枚举

通常使用贪心算法或者动态规划选出最优的执行计划

TPS-DS Q25

关闭CBO时:

开启CBO时:

CBO小结


1.3社区开源实践


概览

Apache Calcite

Apache Calcite 是面向 Hadoop 新的查询引擎,它提供了标准的 SQL 语言、多种查询优化和连接各种数据源的能力。

Calcite 的目标是“ one size fits all (一种方案适应所有需求场景)”, 希望能为不同计算平台和数据源提供统一的查询引擎,并以类似传统数据库的访问方式(SQL 和高级查询优化)来访问Hadoop 上的数据。

Calcite RBO

HepPlanner

VolcanoPlanner

VolcanoPlanner

总结


1.4前沿趋势


对SQL优化器的新要求:

DATA + AI

AI4DB

DB4AI

#大数据#SQL查询优化器