大体来说,MySQL 可以分为Server 层和存储引擎层两部分。
- Server 层包括连接器、查询缓存、分析器、优化器、执行器等
- 存储引擎层负责数据的存储和提取。
一个查询语句执行,通常要经过6个步骤:
-
连接:首先,客户端与数据库服务端建立连接,这时会进行包括用户鉴权、创建线程、维持和管理连接等工作
-
查询缓存:MySQL 拿到一个查询请求后,会先到查询缓存中看看,如果缓存中存在,则直接返回,如果不存在,则继续后续查询流程。需要注意的是,这个缓存模块是默认关闭的,不推荐使用,因为只有sql语句完全一样才能匹配到,并且一旦缓存的数据有更新,缓存就会失效。8.0版本之后已经移除了这个模块。通常我们使用ORM框架中的缓存,或者Redis来达到使用缓存的效果。
-
语法解析和预处理:这一步主要做的事情是对 SQL语句进行词法和语法的分析以及语义的解析。检查sql语法是否符合规范,并通过预处理器检查表名、字段、别名等是否存在,是否有歧义,预处理之后得到一个新的解析树。
-
查询优化器:查询优化器会根据解析树生成不同的执行计划,然后选择一种最优的执行计划,进行后续的语句执行。
-
执行引擎:得到执行计划后,需要执行器(执行引擎)它利用存储引擎提供的相应的API来完成操作,最后把数据返回给客户端。
查询语句在索引树上查找的过程,先是通过 B+ 树从树根开始,按层搜索到叶子节点,然后可以认为数据页内部通过二分法来定位记录。
-
对于普通索引来说,查找到满足条件的第一个记录后,需要查找下一个记录,直到碰到第一个不满足条件的记录。
-
对于唯一索引来说,由于索引定义了唯一性,查找到第一个满足条件的记录后,就会停止继续检索。
标签:语句,缓存,查询,查找,简述,引擎,执行 From: https://www.cnblogs.com/dong320/p/16598023.html