数据库:理论基础
SQL查询引擎概述-关系模型与查询优化
一、SQL语句分类
关系模型->关系代数(过程式)->SQL(声明式)
SQL->AST->Logical Plan Tree->Physical Plan Tree
二、查询流程概述
三、基于规则的查询优化
基于关系代数等价性进行逻辑变换,减少无用开销
- 关系代数等价:关系代数表达式生成相同的结果集
- 依据关系代数的等价交换原则做一些逻辑变换
- 谓词下推:1) 尽可能早地进行过滤;2) 分解复杂的谓词条件,下推;3) 分解连接条件,笛卡尔积转Join计算
- 投影下推:提前做投影,去除不需要的列信息
- 排序、Limit、聚合下推
- 投影消除:如果子集投影和投影操作相同,则消除投影操作
- 排序消除:如果子集结果排序和排序操作相同,则消除排序操作
四、基于代价的查询优化
基于统计信息进行代价搜索,选择最优的物理执行计划
SQL查询引擎概述-执行引擎
一、查询流程和表达式
1. 查询流程
查询的过程:SQL语句->查询计划->查询结果
2. 查询计划
查询计划描述了执行的动作,通过以下方式进行描述
- 运算符(Operator):Projection\TopK\Sort\Filter(Select)\HashJoin\Aggregation\TableScan…
- 表达式(Expression):R.id, S.id, S.age \ age >= 20 \ COUNT(S.id) + 1, AVG(S.age) <= 50 \ R.id = S.id \ …
- 运算符中包含表达式 查询计划示例图
3.表达式(Expression)
3.1 表达式类型:常量,元组属性引用,标量函数,聚合函数
- 常量(Constant):表达式中的常量值
- 元组属性引用(Tuple Atribute Ref):引用表中某个属性的值
- 标量函数(Scalar Function):比较(,!=,>=,<=,in..);逻辑 (AND,OR, XOR, NOT..);算术 (AND, SUB, MUL, DIV, MOD ..);内置函数(Buildin Function);自定义函数(UDF)
- 聚合函数(Agg Function):COUNT,MAX, MIN, SUM, AVG
3.2 表达式求值
整体是自底向上求值,分为 元组属性求值、标量函数求值、聚合函数求值 三种:
- 元组属性求值:输入一个元组,输出元组中对应属性的值; 标量函数求值:Row Style 输入一个元组,输出一个标量;Block Style 输入一个 Block,输出一个 vector; 聚合函数求值:Initialize 初始化聚合状态;Update 根据当前的 Tuple 更新聚合状态;Finalize 计算聚合最终状态
二、常见运算符
- 排序(Sorting) 排序是查询执行中的基本算法,在多个场景中使用,Order by, group by, sortmerge join 排序类型:1) 内存排序(In-memory sorting) 快排、堆排、归并排序等;2) 外部归并排序( External Merge sorting) IO代价评估、两路外部归并、K路外部归并。
作者:ChaunhewieTian 链接:https://www.jianshu.com/p/fed99000e664 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。