h2database学习(二):executeQuery的生命周期(下)

这里主要讲数据的获取,先看一张简图

一次查询,客户端总共发起3次请求,分别是请求建立连接(A),请求传入sql预编译(B),执行查询(C)。

服务端:

收到A请求后,初始化Session,DB,Table,Index,Page。其中包含读db文件取到meta信息和真实数据,加载到内存。如果数据量小,比如我测试只有2条数据,作为Root的Page,已经把这2条记录加载到其内部的成员变量Object[] keys,Object[] values了,在后面接收到C请求后,不会再有读磁盘的IO操作。

收到B请求后,解析sql语句,什么表,有哪几列,生成DML指令缓存起来并返回给客户端。

收到C请求后,遍历索引,从Page里取出数据封装成RowImpl,返回给客户端。

整理几个常见的类的依赖关系,便于理解代码。

此条目发表在数据库分类目录,贴了, 标签。将固定链接加入收藏夹。