# TiKV 数据读取流程 (B)

![`left`](./student-guide/diagram/08-Data-reading-process-01-02.png)
-------------------------------------------------------------
TiDB 读流程简述
  - 如果是一个非点查询，即 Coprocessor 请求时，会做下面的操作
    - 请求被线程池调度起来之后，第一步先获取 Snapshot
    - 根据 Snapshot 构建一个 Handler 用来处理这个请求
    - 使用步骤 2 构建的 Handler 处理这个请求
    - 最底层的算子 TableScan / IndexScan 使用 Snapshot 的 Range-lookup
      - RocksDB 中有 Block Cache 在内存中缓存数据，则直接命中并返回
      - 如果 Block Cache  没有命中，那么
        - MemTable（Mutable / Immutable）
        - Block (Index Block / Data Block)，RocksDB 使用 TwoLevelIterator 读取 SST File，其中使用 first_level_iter 读取 Index Block，使用 second_level_iter 读取 Data Block。
