MySQL 架构介绍
和其它数据库相比,MySQL 有点不同凡响,它的架构能够在多种不同场景中利用并施展良好作用。次要体现在存储引擎的架构上, 插件式的存储引擎架构将查询处理和其它的零碎工作以及数据的存储提取相拆散 。这种架构能够依据业务的需要和理论须要抉择适合的存储引擎。
1. 连贯层
最上层是一些客户端和连贯服务,蕴含本地 socket 通信和大多数基于客户端 / 服务端工具实现的相似于 tcp/ip 的通信。 次要实现一些相似于连贯解决、受权认证、及相干的平安计划 。在该层上引入了线程池的概念,为通过认证平安接入的客户端提供线程。同样在该层上能够实现基于 SSL 的平安链接。服务器也会为平安接入的每个客户端验证它所具备的操作权限。
2. 服务层
第二层架构次要实现大部分的外围服务性能,包含查问解析、剖析、优化、缓存、以及所有的内置函数,所有跨存储引擎的性能也都在这一层实现,包含触发器、存储过程、视图等
3. 引擎层
存储引擎层,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同的存储引擎具备的性能不同,这样咱们能够依据本人的理论须要进行选取。
4. 存储层
数据存储层,次要是将数据存储在运行于该设施的文件系统之上,并实现与存储引擎的交互。
更合乎程序员审美的 MySQL 服务器逻辑架构图
查问阐明
mysql 的查问流程大抵是:
- mysql 客户端通过协定与 mysql 服务器建连贯,发送查问语句,先查看查问缓存,如果命中,间接返回后果,否则进行语句解析
- 有一系列预处理,比方查看语句是否写正确了,而后是查问优化(比方是否应用索引扫描,如果是一个不可能的条件,则提前终止),生成查问打算,而后查问引擎启动,开始执行查问,从底层存储引擎调用 API 获取数据,最初返回给客户端。怎么存数据、怎么取数据,都与存储引擎无关。
- 而后,mysql 默认应用的 BTREE 索引,并且一个大方向是,无论怎么折腾 sql,至多在目前来说,mysql 最多只用到表中的一个索引。