MySQL 基本架构

MySQL作为目前使用最广泛的关系型数据库,相信大多数的计算机相关同学都有使用过的经历。但是在我们使用查询语句去获取数据的时候,MySQL的服务器内部执行了哪些操作来支持我们的查询呢?

本篇文章将揭晓答案。

一、基本架构

这是MySQL的基本架构,查询语句从客户端发过来,依次经过连接器、分析器、优化器、执行器,进入存储引擎,最终获取查询结果集返回

我们首先来看查询缓存关闭时,查询sql的执行链路

1.1 连接器

连接器负责和客户端建立连接、权限验证、安全管理。

1.2 分析器

分析器像是sql的编译器,它会执行词法分析、语法分析等操作。主要进行以下分析:

1) 是否使用了正确的关键字(select、where、order、 limit等)

2)关键字的顺序是否正确

3)目标数据表和列是否存在

我们常见的’You have an error in your SQL syntax’错误,就是分析器判断的结果。

1.3 优化器

一条sql语句的执行可以由不同的执行计划来完成,这些计划之间的成本不同。

优化器会基于统计信息和代价模型,选择一条‘它认为’成本最低的计划。

1.4 执行器

执行器拿到优化器生成的执行计划,去调用存储引擎的API来完成最终的数据获取与返回的工作。

1.5 查询缓存

现在,我们再把查询缓存放进来考虑,查询缓存默认关闭,可通过set query_cache_type = 1或者修改配置文件开启。

查询缓存以(key,value)的形式保存执行过的sql语句与查询结果,若一条查询sql可以在查询缓存中找到,则直接返回其对应的查询结果。

与查询缓存的交互会发生在三个阶段:

1)连接器根据拿到的sql,去看查询缓存中是否有相同的key,若有则直接返回

2)分析器在识别到进来的sql是一条update语句,则会将查询缓存设为失效

3)执行器在执行完查询语句后,会向查询缓存添加一个(key,value)对

查询缓存一般不建议开启,因为执行完一次更新操作后,这个表中的查询缓存都会被清空。因此查询缓存只建议在极少更新的表中开启

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