TiDB 源码阅读(三):插入数据
💡
原文中文,约12400字,阅读约需30分钟。
📝
内容提要
本文分析了TiDB执行INSERT语句的过程,包括解析、编译和执行等步骤。INSERT操作涉及构建执行器、处理数据编码和生成键值对,最终将数据写入TiKV。文章详细介绍了记录键和索引键的编码格式及相关代码位置。
🎯
关键要点
- 本文分析了TiDB执行INSERT语句的过程,包括解析、编译和执行等步骤。
- INSERT操作涉及构建执行器、处理数据编码和生成键值对,最终将数据写入TiKV。
- 简单的INSERT语句执行流程较为简化,逻辑计划优化和物理计划优化不多。
- INSERT语句的执行流程包括handleQuery、ExecuteStmt、ExecStmt.Exec等步骤。
- InsertExec负责执行INSERT操作,涉及到数据的准备和写入。
- Record Key的编码格式为t{tableID}_r{rowID},包含表前缀、表ID和行ID。
- 索引Key的编码格式分为非唯一索引和唯一索引,包含表前缀、表ID、索引ID和索引列值。
- 文章提供了完整的示例,展示了INSERT语句的执行及生成的KV对。
- 关键编码函数包括生成Record Key、Index Key和Index Value的函数。
- 总结了INSERT语句的调用链及数据编码保存到TiKV的过程。
❓
延伸问答
TiDB是如何执行INSERT语句的?
TiDB执行INSERT语句的过程包括解析、编译和执行,主要通过handleQuery、ExecuteStmt和ExecStmt.Exec等步骤完成。
INSERT操作中Record Key的编码格式是什么?
Record Key的编码格式为t{tableID}_r{rowID},其中包含表前缀、表ID和行ID。
TiDB的INSERT语句执行流程中涉及哪些关键函数?
关键函数包括handleQuery、ExecuteStmt、ExecStmt.Exec、InsertExec.Next和addRecord等。
TiDB如何处理索引Key的编码?
索引Key的编码格式分为非唯一索引和唯一索引,包含表前缀、表ID、索引ID和索引列值。
INSERT语句的执行流程中,数据是如何写入TiKV的?
数据通过InsertExec执行,经过编码后生成键值对,最终写入TiKV并等待COMMIT命令。
TiDB中INSERT语句的逻辑计划和物理计划优化如何?
对于简单的INSERT语句,逻辑计划和物理计划的优化较为简化,主要走个过场。
➡️