关系数据库 Query Execution 的流程
在关系型数据库中, 一条 Query 语句执行的流程如下:
DBMS将Quey语句翻译成特定的内部抽象语言, 通常有两种 Query Plan
- logical Plan: 使用关系代数描述 Query Plan, 描述关系操作符或者非关系操作符
- physical: 描述这些操作符的实际动作
Query 处理的三个阶段
- 解析以及重写 Query, SQL->logical plan
- Query 语言优化
logical plan -> 优化的 logical plan -> physical plan - Query Execution: 在数据库中执行这个 physical plan
Processing Model
Processing Model 在解析节点不起直接作用, 起作用的主要阶段是优化节点(Optimization), 优化器会根据数据库的统计信息(如表大小, 索引情况)和 SQL 查询条件, 生成一个最优的执行计划, 这里可能包括选择最合适的索引, 决定连接方式等, 以尽量减少资源消耗和提升查询速度.
Processing Model 在这个阶段开始生效, 帮助定义 SQL 优化器在构建执行计划时如何考虑数据的存储和读取方式.
根据调用数据库操作符顺序的不同, 我们通常将 Processing Model 分为两类, 分别是自上而下, 与自下而上的方式, 类似于语言编译的流程.
常见的三种Execution模型是:
- Iterator Model
- Materialization Model
- Vectorized / Batch Model
Iterator Model
Iterator Model:
简单点说, 每次处理一行, 尽可能地将这一行的所有操作处理完, 同时, 假设A行还没有处理完, 可以开始处理B行, 同时处理多行数据的方式称为 Pipeline