程序员的公众号:源1024,获取更多资料,无加密无套路!
最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上
MySQL 的架构共分为两层:Server 层和存储引擎层。
-
Server 层负责建立连接、分析和执行 SQL
-
存储引擎层负责数据的存储和提取
SQL 执行过程的主要步骤:
连接器
-
负责跟客户端进行 TCP 三次握手建立连接
-
校验用户名和密码
-
读取用户的权限
-
维持和管理连接
查询缓存
-
连接器首先检查查询缓存,查询缓存是以 key-value 形式保存在内存中的,key 为 SQL 查询语句,value 为 SQL 语句查询的结果
-
如果在缓存中找到匹配的结果,那么直接返回结果
注:MySQL8已经废弃了查询缓存(Query Cache),主要原因是:
-
查询缓存占用大量内存空间,对于大型数据库来说可能会导致内存不足
-
查询缓存无法处理动态数据
-
在高并发的环境下,查询缓存的锁竞争可能会成为瓶颈,降低系统的并发性能
分析器
-
分析器对 SQL 语句进行语法分析,构建SQL 语法树,方便获取 SQL 类型、表名、字段名、 where 条件等
-
语义分析,检查表、列、函数等对象的存在性和合法性,并进行权限验证
优化器
-
优化器根据数据库的规则,生成多个可能的执行计划,计划包括不同的索引选择、连接顺序、筛选条件等
-
决定选择使用哪一种作为最优的执行计划,然后传递给执行器
执行器
-
执行器和存储引擎交互,交互以记录为单位
-
执行器根据执行计划执行具体的查询操作
-
它负责调用存储引擎的接口,处理数据的存储、检索和修改
-
执行器会根据执行计划从磁盘或内存中获取相关数据,并进行联接、过滤、排序等操作,生成最终的查询结果
存储引擎
-
执行器将查询请求发送给存储引擎
-
存储引擎组件负责数据存储、检索和修改操作
-
存储引擎根据执行器的请求,从磁盘或内存中读取或写入相关数据
返回结果
-
存储引擎将查询结果返回给执行器
-
执行器将结果返回给连接器
-
连接器将结果发送回客户端,完成整个执行过程