简述一条查询语句的执行过程

大体来说,MySQL 可以分为Server 层存储引擎层两部分。

  • Server 层包括连接器、查询缓存、分析器、优化器、执行器等
  • 存储引擎层负责数据的存储和提取。

 

一个查询语句执行,通常要经过6个步骤:

  1. 连接:首先,客户端与数据库服务端建立连接,这时会进行包括用户鉴权、创建线程、维持和管理连接等工作

  2. 查询缓存:MySQL 拿到一个查询请求后,会先到查询缓存中看看,如果缓存中存在,则直接返回,如果不存在,则继续后续查询流程。需要注意的是,这个缓存模块是默认关闭的,不推荐使用,因为只有sql语句完全一样才能匹配到,并且一旦缓存的数据有更新,缓存就会失效。8.0版本之后已经移除了这个模块。通常我们使用ORM框架中的缓存,或者Redis来达到使用缓存的效果。

  3. 语法解析和预处理:这一步主要做的事情是对 SQL语句进行词法和语法的分析以及语义的解析。检查sql语法是否符合规范,并通过预处理器检查表名、字段、别名等是否存在,是否有歧义,预处理之后得到一个新的解析树。

  4. 查询优化器:查询优化器会根据解析树生成不同的执行计划,然后选择一种最优的执行计划,进行后续的语句执行。

  5. 执行引擎:得到执行计划后,需要执行器(执行引擎)它利用存储引擎提供的相应的API来完成操作,最后把数据返回给客户端。 

 

 

查询语句在索引树上查找的过程,先是通过 B+ 树从树根开始,按层搜索到叶子节点,然后可以认为数据页内部通过二分法来定位记录。

  • 对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足条件的记录。

  • 对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。

 

posted @ 2022-08-18 11:09  轨迹320  阅读(181)  评论(0编辑  收藏  举报