MySQL 执行并返回结果
本文将介绍 MySQL 中执行命令、返回结果的具体流程
一、具体流程
MySQL 的服务层会调用存储引擎的接口获取行数据
假设存储引擎为 InnoDB,则 InnoDB 会读取磁盘中的页放入缓冲池中,并在此过程中通过 LRU 机制淘汰数据页,确保缓冲池空间的可用。
InnoDB 会读取缓冲池中的内存页,并将行数据返回给服务层
如果行数据不符合条件,跳过;
如果行数据符合条件,放入结果集中
当结果集中的数据达到 net_buffer_length 时,MySQL 会调用网络接口将数据发出,若发送成功,则清空结果集,继续调用存储引擎获取行数据
当遍历结束时,停止动作
二、说明
- MySQL 服务层的 net_buffer_length 和 InnoDB 的 LRU 机制确保了无论查询多大的数据,服务器的内存都不会被 “撑爆”
- MySQL 是 “边读变发” 的,因此如果客户端接收数据过慢,MySQL 服务端结果无法发出,执行时间将被延长
参考
- MySQL 技术内幕
- MySQL 实战 45 讲
- MySQL 是怎样运行的:从根儿上理解 MySQL