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语句,逻辑计划和物理计划的优化较为简化,主要走个过场。

➡️

继续阅读