数据库
mysql
MySQL逻辑架构
mysql索引
mysql性能分析(explain)
mysql事务
MVCC
SQL JOINS
本文档使用 MrDoc 发布
-
+
首页
MySQL逻辑架构
和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用,并发挥良好作用。<font color='red'>主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。</font>这种架构可以根据业务的需求和实际需要选择合适的存储引擎。  ## 连接层 最上层是一些客户端和连接服务,包含本地socket通信和大多数基于客户端/服务 端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于SSL的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。 ## 服务层 1. Management Serveices & Utilities: 系统管理和控制工具 2. SQL Interface:SQL接口。接受用户的SQL命令(包括DDL和DML指令)并返回执行结果。比如select from就是调用SQL Interface。 3. Parser: 解析器,将客户端发送的SQL进行语法和语义解析,生成“解析树”。SQL命令传递到解析器的时候会被解析器验证和解析。预处理器根据一些MySQL规则进一步检查“解析树”是否合法,例如这里将检查数据表和数据列是否存在,还会解析名字和别名,看看它们是否有歧义,最后生成新的“解析树”。  4. Optimizer: 查询优化器 * 语法树没有问题后,**优化器将其转成执行计划,并选择最有效的执行计划**。优化器是决定查询性能的关键组件,而数据库的统计信息是优化器判断的基础。 * 这个执行计划表明应该**使用哪些索引**进行查询(全表检索还是使用索引检索),表之间的连接顺序如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来执行查询,并将查询结果返回给用户。 * 执行一个查询时,它使用“选取-投影-连接”策略进行查询。例如: select uid,name from user where gender= 1; 这个select 查询先根据where 语句进行**选取**,而不是先将表全部查询出来以后再进行gender过虑 这个select查询先根据uid和name进行属性**投影**,而不是将属性全部取出以后再进行过滤 将这两个查询条件**连接**起来生成最终查询结果。 **注意:mysql的优化器是基于查询成本的优化,不是基于查询时间的优化。** 5. Cache和Buffer: 查询缓存组件。 如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。它存储SELECT语句以及相应的查询结果集。 这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等 这个查询缓存可以在 不同客户端之间共享 。 从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL 8.0中删除 。 ## 引擎层 存储引擎层,**存储引擎真正的负责了MySQL中数据的存储和提取**,服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。后面介绍MyISAM和InnoDB ## 存储层 所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统 上,以 文件 的方式存 在的,并完成与存储引擎的交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设 备,但现代文件系统的实现使得这样做没有必要了。
admin
2025年2月21日 21:13
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Rancher
Jenkins
ADMIN-UI
VBEN-ADMIN-UI
RUST-FS
MinIO
mindoc
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码