SQL 执行过程

Server层:连接器,查询缓存,分析器,优化器,执行器

存储引擎是插件式的,不同的存储引擎公用一个 server 层。

1、连接器

负责跟客户端建立连接,获取权限,维持和管理连接

客户端通过连接器,连接到mysql 服务器

长连接占用内存过大的问题:

  • 定期断开占用内存过大的长连接重连
  • Mysql5.7 之后,可以通过执行 mysql_reset_connection 来重新初始化连接资源,不需要重连和权限验证,会恢复到刚刚建立连接的状态

2、查询缓存

更新操作会将一个表的查询缓存全部清空,因此 8.0 中将整个功能删除了

3、分析器

进行词法分析和语法分析,并创建内部数据结构(解析树)

词法分析:将用户输入的内容进行分析识别

语法分析:判断输入的 sql 是否符合语法规则

4、优化器

Mysql 在这一步对其进行各种优化:重写查询,决定表的读取顺序,选择合适的索引

5、执行器

执行之前,判断用户对表是否有执行权限,没权限的话报错

mysql> select * from T where ID=10;

ERROR 1142 (42000): SELECT command denied to user 'b'@'localhost' for table 'T'