# 执行读取 (A)

![center](./student-guide/diagram/05-Read-execution-01-01.png)
-------------------------------------------------------------
下面我们结合下图，一起看一下 SQL 的读取流程，完成这个流程的主要有：Executor、DistSQL、KV、PD Client 和 TiKV Client 线程模块。

首先，Executor（执行器）模块会按照执行计划分批读取数据，在开始之前还需要做以下 2 件事：
  - 从 TiDB Server 的缓存中获得表的元数据信息 （在 information schema 中）。
  - 获得需要读取 Region 的定位，这个也是通过 PD Client 模块完成的，它可以帮我们定位某个 key 的 Region 以及其所在的 TiKV 。

但是，为了防止对于 PD 的频繁访 问，在 TiKV-Client 模块中维护一个 Region Cache 组件，用来缓存 Region 信息，所以我们会先从 Region Cache 中读取 Region 信息，如果没有命中再通过 PD-Client 进行读取，发现有过期信息后，会清理 Region Cache 并重新载入。