2.5.1 The Lifecycle of a SQL Statement(在 TiDB 中一条 SQL 的生命周期)
TiDB 架构
TiKV 架构
TiDB 数据组织
- 数据从表的行和列形式 → 底层 k-v 形式的存储
- 对于表中的行,行数据会编码成 k-v 键值对的格式
- 存在二级索引的列
-
唯一索引数据被编码为以下形式
-
非唯一索引的数据编码如下
-
TiDB 数据组织的示例
- 在 TiKV 中做全表扫,只要扫描 t101 前缀的数据,就可以拿到全表的数据
一个 SQL 在 TiDB 中的生命周期
- 查询优化
- SQL 解析,得到一个抽象语法树(AST)
- 逻辑优化器,对 SQL 语法进行优化(例如:谓词下推),得到一个逻辑执行计划
- 物理优化器,根据逻辑执行计划和统计信息生成一个物理执行计划
- 统计信息
- 查询执行
- TiDB 层的 Root 执行器,根据多个 Coprocessor 执行返回的结果进行计算
- 分布式 SQL 下推到 TiKV 层进行计算
- TiKV 层的 Coprocessor 执行器
示例
- 客户端发起一个查询,求 AVG(b) 的值
- 下推到多个 TiKV 进行计算,减少返回的数据量,提高计算性能
- 转换成 sum(b) 和 cnt(b)
- 不在每个 TiKV 中直接取 avg(b) 的值,是为了避免精度损失
- TiDB 收到 所有 TiKV 返回的结果进行汇总处理,计算出最终的值返回给客户端