当前位置:网站首页>MYSQL逻辑架构
MYSQL逻辑架构
2022-08-01 00:16:00 【三月不灭】
MySQL逻辑架构
逻辑架构介绍
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKlUr6gB-1658978162466)(network-img/u=3031081140,328241623&fm=253&fmt=auto&app=138&f=JPEG.jpeg)]](/img/9b/6ac541a2a6b1c49c127ce811b7c66e.png)
MySQL插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离,可以根据业务的需求和实际需要选择合适的存储引擎。
MySQL各层介绍
连接层
客户端的连接服务,主要完成客户端的连接处理,授权认证。在该层有一个线程池,每一个连接从线程池中获取线程,省去了创建和销毁线程的开销。
服务层
Management Serveices & Utilities 系统管理和控制工具 SQL Interface SQL 接口。接受用户的 SQL 命令,并且返回用户需要查询的结果。比如 select from 就是调用 SQL Interface Parser 解析器。 SQL 命令传递到解析器的时候会被解析器验证和解析 Optimizer 查询优化器。 SQL 语句在查询之前会使用查询优化器对查询进行优化 Cache 和 Buffer 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取 数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key 缓存, 权限缓存等 引擎层
负责MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信。不同 的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取
存储层
数据存储层,主要是将数据存储在运行于裸设备的文件系统之上,并完成与存储引擎的交互。
相关指令:
show profile:查看sql生命周期
show variables like '%profiling%':查看 profile 是否开启(没有开启,执行 set profiling=1 开启)
show engines:查看所有的数据库引
show variables like '%storage_engine%':查看mysql默认存储引擎的命令:
MySQL大致查询流程
mysql 客户端通过协议与 mysql 服务器建连接,发送查询语句,先检查查询缓存(query cache)——它存储 SELECT 语句以及 相应的查询结果集。如果某个查询结果已经位于缓存中,服务器就不会再对查询进行解析、优化、以及执行。直接返回结果, 否则进行语句解析
语法解析器和预处理:首先 mysql 通过关键字将 SQL 语句进行解析,并生成一颗对应的“解析树”。mysql 解析器将使用 mysql 语法规则验证和解析查询;预处理器则根据一些 mysql 规则进一步检查解析数是否合法。
查询优化器:当解析树被认为是合法的了,并且由优化器将其转化成执行计划。一条查询可以有很多种执行方式, 最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。
SQL执行顺序:
FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT<limit_number>
InnoDB | MyISAM:
| 对比项 | MyISAM | InnoDB |
|---|---|---|
| 外键 | 不支持 | 支持 |
| 事务 | 不支持 | 支持 |
| 行表锁 | 表锁,即使操作一条记录也会锁住整个表, 不适合高并发的操作 | 行锁,操作时只锁某一行,不对其它行有影响, 适合高并发的操作 |
| 缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内 存大小对性能有决定性的影响 |
| B树索引 | 支持 | 支持 |
| 批量插入 | 快 | 慢 |
实际使用中应该如何选择存储引擎:
InnoDB存储引擎:因为InnoDB存储引擎支持事务,所以对于要求事物完整性的场合需要选择InnoDB,比如数据操作除了插入和查询以外还包含有很多更新删除操作,像财务系统等对数据准确性要求较高的系统。
MyISAM存储引擎:如果系统是以读操作和插入操作为主,只有很少的更新删除操作,并且对事务的支持没有要求
边栏推荐
- Matlab/Arcgis processing nc data
- lua入门案例实战123DIY
- 继承的注意事项
- 力扣2326、197
- One line of code to solve CoreData managed object properties change in SwiftUI problem of animation effects
- Carefully organize 16 MySQL usage specifications to reduce problems by 80% and recommend sharing with the team
- How to Design High Availability and High Performance Middleware - Homework
- Automated machine learning pycaret: PyCaret Basic Auto Classification LightGBM
- 基于simulink的Passive anti-islanding-UVP/OVP and UFP/OFP被动反孤岛模型仿真
- 虹科分享|如何用移动目标防御技术防范未知因素
猜你喜欢

vector的基本实现
![[MATLAB project combat] LDPC-BP channel coding](/img/37/4777e4d05cb2dbb1865f1d05ae9878.png)
[MATLAB project combat] LDPC-BP channel coding

类和对象:上
Carefully organize 16 MySQL usage specifications to reduce problems by 80% and recommend sharing with the team

推荐系统:常用评价指标总结【准确率、精确率、召回率、命中率、(归一化折损累计增益)NDCG、平均倒数排名(MRR)、ROC曲线、AUC(ROC曲线下的面积)、P-R曲线、A/B测试】

消息队列消息存储设计(架构实战营 模块八作业)

Classes and Objects: Medium

Automated machine learning pycaret: PyCaret Basic Auto Classification LightGBM

Notes on how to use zeno

Google "Cloud Developer Quick Checklist"; Tsinghua 3D Human Body Dataset; SenseTime "Universal Vision Framework" open class; Web3 Minimalist Getting Started Guide; Free Books for Efficient Deep Learni
随机推荐
什么时候可以使用 PushGateway
一行代码解决CoreData托管对象属性变更在SwiftUI中无动画效果的问题
虚继承的原理
Carefully summarize thirteen suggestions to help you create more suitable MySQL indexes
The principle of virtual inheritance
lua入门案例实战123DIY
/usr/local/bin和/usr/bin的区别
An open source and easy-to-use flowchart drawing tool drawio
设计消息队列存储消息数据的MySQL表格
SQL injection Less42 (POST type stack injection)
Unity3D学习笔记10——纹理数组
Usage of mysql having
zeno使用方法笔记
vim的基本使用-底行模式
Recommendation system: Summary of common evaluation indicators [accuracy rate, precision rate, recall rate, hit rate, (normalized depreciation cumulative gain) NDCG, mean reciprocal ranking (MRR), ROC
2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达彼此的代价都是7。 求,允许施展一次魔法
考研备考方案
精心总结十三条建议,帮你创建更合适的MySQL索引
什么是动态规划,什么是背包问题
Automated machine learning pycaret: PyCaret Basic Auto Classification LightGBM