跳至主要內容

SQL的完整处理流程

张威大约 1 分钟mysqlmysql拓展

SQL的完整处理流程

mysql client和 mysql server进行通信的时候,如果走完所有的MySQL Server模块,需要依次经过连接器、解析器、优化器、执行器、存储引擎

  1. 连接器:使用TCP加密的ssl通信协议管理连接,控制最大连接量,检测连接时长(长时间不通信会断开,释放连接资源),权限验证(账号密码等),查询缓存(两次同样的select之间有更新操作,缓存会清空)
  2. 解析器:生成语法树,解析SQL词法以及语法分
  3. 优化器生成执行计划,选择索引(explain可查看)
  4. 执行器调用存储引擎提供的相应API接口进行数据的读写
  5. 存储引擎读写磁盘数据,构建B+树索引,事务日志(undo log/redo log),锁机制,隔离级别…
class BaseEngine{}

class MyISAM : public BaseEngine{}
class InnoDB : public BaseEngine{}
  • 基类向外提供统一的接口,基类指针指向哪个对象,就调用哪个存储引擎类的方法

MySQL server相当于可以划分成3个模块(红色框):

如果单纯的一次通信,client拿到结果,会MySQL Server这边由负责关闭这个连接,回收这个连接的资源