MySQL执行一条select语句期间发生了什么
执行一条select语句期间发生了什么
MySQL分为Server层和存储引擎层。Server层负责建立连接、分析和执行 SQL,存储引擎层负责数据的存储和提取(支持InnoDB、MyISAM、Memory等多个存储引擎,不同的存储引擎共用一个Server 层)
1、连接器:首先经过TCP三次握手连接MySQL服务,连接器开始验证用户名和密码,读取权限
show processlist查看MySQL服务被多少个客户端连接
2、查询缓存(8.0后删除):SQL语句如果是select语句,就会先去查询缓存看看之前是否执行过(kv形式存内存)。对于更新频繁的表查询缓存命中率低,一个表有更新操作那么这个表的查询缓存就会被清空,鸡肋。
3、解析SQL:解析器进行词法分析,语法分析,没问题就构建SQL语法树
4、执行SQL:预处理阶段(检查SQL语句中的表或字段是否存在,将 select * 中的 * 扩展为表上所有列)优化阶段(负责将 SQL 语句执行方案确定下来,语句前+explain可以输出SQL语句的执行计划)执行阶段(执行器和存储引擎交互,交互以记录为单位,从存储引擎读取记录,返回给客户端)