面试官:说一下SQL的执行过程


程序员的公众号:源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 条件等

  • 语义分析,检查表、列、函数等对象的存在性和合法性,并进行权限验证

优化器
  • 优化器根据数据库的规则,生成多个可能的执行计划,计划包括不同的索引选择、连接顺序、筛选条件等

  • 决定选择使用哪一种作为最优的执行计划,然后传递给执行器

执行器
  • 执行器和存储引擎交互,交互以记录为单位

  • 执行器根据执行计划执行具体的查询操作

  • 它负责调用存储引擎的接口,处理数据的存储、检索和修改

  • 执行器会根据执行计划从磁盘或内存中获取相关数据,并进行联接、过滤、排序等操作,生成最终的查询结果

存储引擎
  • 执行器将查询请求发送给存储引擎

  • 存储引擎组件负责数据存储、检索和修改操作

  • 存储引擎根据执行器的请求,从磁盘或内存中读取或写入相关数据

返回结果
  • 存储引擎将查询结果返回给执行器

  • 执行器将结果返回给连接器

  • 连接器将结果发送回客户端,完成整个执行过程

你可能感兴趣的:(sql,数据库)