当前位置: 首页 > ds >正文

【MySQL数据库】存储引擎 学习记录

MySQL存储引擎

  • MySQL体系结构
    • 连接层
    • 服务层
    • 存储引擎层
    • 存储层
  • 存储引擎
  • InnoDB 存储引擎
  • MyISAM 存储引擎
  • Memory 存储引擎

MySQL体系结构

[图片]

MySQL服务端的体系结构是分层的

连接层

连接层 是Server层的最外层,是 客户端数据库 打交道的第一个入口

作用

  1. 建立连接
  2. 身份验证 & 权限校验
  3. 连接管理
  4. 连接池功能

服务层

它是介于 连接层存储引擎层 之间的中间层,主要负责 SQL 的接收解析优化和执行调度完成缓存的查询,但 不直接存储数据

所有跨存储引擎的实现都是在服务层的

作用

  1. SQL 接收与解析
  • 接收从连接层传过来的 SQL 语句
  • 交给 解析器 转成语法树,方便后续处理
  1. SQL 优化
  • 把语句翻译成执行计划
  • 比如 SELECT * FROM user WHERE name=‘Tom’ AND age=20;
    • 优化器决定用哪个索引更快
    • 决定多表查询时的 join 顺序
  1. 执行调度(执行器)
  • 按照优化器的执行计划,逐步调用存储引擎接口
  • 比如执行器发指令
  • “InnoDB,请帮我查 user 表主键=1 的那一行。”
  1. 权限校验
  • 检查用户是否有执行这条 SQL 的权限(比如能不能查这个表、能不能更新字段)

存储引擎层

上图中的蓝桶实际上就是一个一个的 存储引擎(若现有的存储引擎不能满足需要,还可以进行拓展)

存储引擎层 是 MySQL 体系结构的 最底层,它是 真正和磁盘/内存打交道的模块,负责 数据的存储、索引和读取,服务器通过API和存储引擎进行通信

索引是在存储引擎中实现的,意味着不同的存储引擎的索引结构不同,它们的功能也不同

作用

  1. 数据存储与管理
  • 决定数据在磁盘上怎么组织(页、区、段、表空间)
  • 决定索引结构(B+树、哈希等)
  1. 索引维护
  • 比如 InnoDB 里的主键索引(聚簇索引)、辅助索引
  • 负责插入、更新时自动维护索引结构
  1. 事务支持(不同引擎差异很大)
  • InnoDB:支持事务(ACID)、行级锁、MVCC
  • MyISAM:不支持事务,只有表级锁
  1. 锁机制
  • 决定并发控制的粒度
  • 行锁、表锁、意向锁等,都是引擎层在实现
  1. 缓存与日志
  • InnoDB 有 buffer pool、redo log、undo log,保证性能和数据一致性
  • 其他引擎可能实现不同

存储层

主要是存储数据库的相关数据,包含一系列日志
将数据存储在文件系统之上,并完成与存储引擎的交互

存储引擎

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式
存储引擎基于数据库表,不是基于数据库的——》一个数据库下的多张表可以选择不同的存储引擎(存储引擎也被称为表的类型)

建表时,没有指定存储引擎,默认InnoDB(MySQL 5.5后)

  1. 指定存储引擎
create table 表名(字段1 类型,...字段n 类型,
)ENGINE = INNODB;  
  1. 查看当前数据库支持的存储引擎
show engines;

[图片]

InnoDB 存储引擎

InnoDB 是一种兼顾 高可靠性高性能 的通用存储引擎,在MySQL5.5之后,InnoDB是默认的 MySQL 存储引擎

在磁盘中涉及到的文件
InnoDB 引擎的每张表都会对应一个 ×××.ibd 的表空间文件(×××是表名),该文件存储 表的结构、数据和索引
(二进制文件,不能直接在记事本中打开)

支持事务、外键、行级锁

逻辑存储结构
分为五个部分
TableSpace:表空间
Segment:段
Extent:区
Page:页
Row:行
[图片]

表空间(TableSpace)包括段(Segment)
段(Segment)包括区(Extent)
区(Extent)包含页(Page)
页(Page)包含行(Row)
Trx id :最后一次操作事务的id
Roll pointer : 指针
col… : 字段

页 是磁盘操作的 最小单元
一个 区 的大小是固定的 1M
一个 页 的大小是固定的 16K
一个区中可以包含64个页

MyISAM 存储引擎

MyISAM 是 MySQL 早期默认的存储引擎

特点:
不支持事务和外键
支持表锁,不支持行锁
访问速度快

在磁盘中涉及到的文件:
.MYD :存放数据
.MYI :存储索引
.sdi : 存储表结构的信息

Memory 存储引擎

Memory 引擎的表的数据存储在内存中,由于收到硬件问题和断电问题的影响,只能将这些表作为临时表或缓存使用

特点:
内存存放,访问速度快
hash索引

在磁盘中涉及到的文件:
.sdi :存储表结构信息

http://www.xdnf.cn/news/19120.html

相关文章:

  • 高光谱成像在食品质量和安全检测中的应用
  • 【C++游记】子承父业——乃继承也
  • [p2p-Magnet] 队列与处理器 | DHT路由表
  • iOS文件管理在uni-app开发中的实战应用,多工具解决
  • hive on tez如果是2个大表union会写几次临时文件到hdfs目录,数据量如何计算
  • 密码管理中
  • 水果目标检测[2]:ALAD-YOLO:一种轻便、精确的苹果叶病检测仪
  • 学习Python中Selenium模块的基本用法(7:元素操作-1)
  • 【golang长途旅行第33站】常量------补充知识点
  • golang 12 package 和 module
  • Docker 入门指南:从基础概念到常见命令及高级工具详解
  • C++:知识点小结
  • vue2 watch 的使用
  • 从 WPF 到 Avalonia 的迁移系列实战篇1:依赖属性的异同点与迁移技巧
  • LangChain4j入门一:LangChain4j简介及核心概念
  • Python计算点云的欧式、马氏、最近邻、平均、倒角距离(Chamfer Distance)
  • 嵌入式C语言进阶:高效数学运算的艺术与实战
  • MySQL 8 与 PostgreSQL 17 对比分析及迁移指南
  • 【网络】网络基础概念
  • HarmonyOS安全开发实战:一套好用的数据加密方案
  • mysql mvcc机制详解
  • Java全栈开发面试实战:从基础到微服务架构的深度解析
  • IntelliJ IDEA Debug 模式功能指南
  • 替身演员的艺术:pytest-mock 从入门到飙戏
  • 寻找AI——初识墨刀AI
  • 极海发布APM32F425/427系列高性能MCU:助力工业应用升级
  • Ansible模块实战,操作技巧
  • 【C#】获取不重复的编码(递增,非GUID)
  • 怎么理解API?
  • R-Zero:通过自博弈机制让大语言模型无需外部数据实现自我进化训练