已解决
【MySQL高级】
来自网友在路上 170870提问 提问时间:2023-11-10 13:18:34阅读次数: 70
最佳答案 问答题库708位专家为你答疑解惑
文章目录
- 1. MySQL的数据目录
- 2.逻辑架构
- 3.
1. MySQL的数据目录
查看:find / -name mysql
MySQL数据库文件的存放路径:/var/lib/mysql/
相关命令目录:/usr/bin
(mysqladmin、mysqlbinlog、mysqldump等命令)和/usr/sbin
。
配置文件目录:/usr/share/mysql-8.0(命令及配置文件),/etc/mysql(如my.cnf)
表在文件系统中的表示:
- InnoDB存储引擎模式:
描述表结构的文件:.frm (二进制格式 存储的)
表中数据和索引:在MySQL5.6.6以及之后的版本中,存储在独立表空间。.ibd
- MyISAM存储引擎模式:
表结构:.frm
表中数据和索引:在MyISAM中的索引全部都是 二级索引 ,该存储引擎的 数据和索引是分开存放 的。
.frm 存储表结构
.MYD 存储数据 (MYData)
.MYI 存储索引 (MYIndex)
2.逻辑架构
sql执行的流程:
- 建立TCP 连接:每一个连接从线程池中获取线程
- SQL接口:比如SELECT … FROM就是调用SQL Interface
- Parser: 解析器:在解析器中对 SQL 语句进行语法分析、语义分析
- Optimizer: 查询优化器:生成一个执行计划 。这个执行计划表明应该 使用哪些索引 进行查询(
全表检索
还是使用索引检索
),表之间的连接顺序
(先左表还是先右表)如何,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户
在查询优化器中,可以分为逻辑查询
优化阶段和物理查询
优化阶段。 - 引擎层:真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作
简化为三层结构:
- 连接层:客户端和服务器端建立连接,客户端发送 SQL 至服务器端;
- SQL 层(服务层):对 SQL 语句进行查询处理;与数据库文件的存储方式无关;
- 存储引擎层:与数据库文件打交道,负责数据的存储和读取。
数据库缓冲池:
InnoDB 存储引擎是以页为单位
来管理存储空间的,我们进行的增删改查操作其实本质上都是在访问页面(包括读页面、写页面、创建新页面等操作)。而磁盘 I/O 需要消耗的时间很多,DBMS 会申请 占用内存来作为数据缓冲池
,在真正访问页面之前,需要把在磁盘上的页缓存到内存中的Buffer Pool
之后才可以访问。
缓冲池如何读取数据:
缓冲池管理器会尽量将经常使用的数据保存起来,在数据库进行页面读操作的时候,首先会判断该页面是否在缓冲池中,如果存在就直接读取,如果不存在,就会通过内存或磁盘将页面存放到缓冲池中再进行
读取
如果我们执行 SQL 语句的时候更新了缓存池中的数据,那么这些数据会马上同步到磁盘上吗? 不会,过一段时间再写入磁盘
读都是在缓冲池中读取
我更新到一半突然发生错误了,想要回滚到更新之前的版本,该怎么办?连数据持久化的保证、事务回滚都做不到还谈什么崩溃恢复?
答案:Redo Log & Undo Log
3.
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"【MySQL高级】":http://eshow365.cn/6-37238-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!