这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
MySQL-深入理解RDBMS
1. 一条SQL语句的执行流程
- SQL引擎:Parser、Optimizer、Executor
- 事务引擎
- 存储引擎:Data File、Log File
2. SQL引擎
2.1 SQL引擎-Parser
解析器(Parser)一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。
2.2 SQL引擎—Optimizer
- 基于规则的优化(RBO, Rule Base Optimizer)
- 表连接优先——总是小表先进行连接
- Scan优化
- 唯一索引
- 普通索引
- 全表扫描
- 基于代价的优化(CBO,Cost Base Optimizer),如一个查询有多种执行方案,CBO会选择其中代价最低的方案去真正地执行
2.3 SQL引擎-Executor
-
火山模型
每个Operator调用Next操作,访问下层Operator,获得下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层。
- 优点:
- 每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
- 缺点:
- 每计算一条数据有多次函数调用开销,导致CPU效率不高
- 优点:
-
向量化模型
每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch。
- 优点:
- 函数调用次数降低为1/N
- CPU cache命中率更高
- 可以利用CPU提供的SIMD(Single Instruction Multi Data)机制
- 优点:
-
编译执行
LLVM动态编译执行技术,将所有的操作封装到一个函数里面,函数调用的代价也能大幅度降低。