TiDB 源码阅读系列文章(二十三)Prepare/Execute 请求处理
作者:苏立 在之前的一篇文章 《TiDB 源码阅读系列文章(三)SQL 的一生》 中,我们介绍了 TiDB 在收到客户端请求包时,最常见的 Command --- COM_QUERY 的请求处理流程。本文我们将介绍另外一种大家经常使用的 Command --- Prepare/Execute 请求在 TiDB 中的处理过程。 Prepare/Execute Statement 简介 首先我们先简单回顾下客户端使用 Prepare 请求过程: 客户端发起 Prepare 命令将带 “?” 参数占位符的 SQL 语句发送到数据库,成功后返回 stmtID 。 具体执行 SQL 时,客户端使用之前返回的 stmtID ,并带上请求参数发起 Execute 命令来执行 SQL。 不再需要 Prepare 的语句时,关闭 stmtID 对应的 Prepare 语句。 相比普通请求,Prepare 带来的好处是: 减少每次执行经过 Parser 带来的负担,因为很多场景,线上运行的 SQL 多是相同的内容,仅是参数部分不同,通过 Prepare 可以通过首次准备好带占位符的 SQL,后续只需要填充参数执行就好,可以做到“一次 Parse,多次使用”。 在开启 PreparePlanCache 后可以达到“一次优化,多次使用”,不用进行重复的逻辑和物理优化过程。 更少的网络传输