[24年单独笔记] MySQL 引擎架构

Work with MySQL < Frame_ENGINES

存储引擎是辅助处理数据存储的一个核心,作为软件组合当中的存储核心而存在。又称为 表类型(储存表和操作表)。Oracle 和 SQL Server等服务器通常只存在一个引擎,而MySQL提供了多个。

⚠️ 这并非意味着 MySQL 的功能领先于其他SQL服务,只是在设计层面与可拓展的潜力领先于其他。对应不同领域而言只有最适合,没有最优秀的说法!

我们推荐了解 C 语言的基础标准后,再看此篇,否则割裂的观感不佳!

关于存储概述的理念

本节我们将叙述有关于存储的概念,以方便后续的深入学习。仅查询请直接跳转至 "MySQL 引擎支持"小节。

程序的运行 严格遵守 着四个步骤,按顺序分别是:输入存储处理输出。而一套系统则是在这个过程当中不断循环。一般用户是无法直接参与程序存储的过程的。

MySQL 是一个综合的存储服务,数据库系统之所以能位列文件管理系统之后,是技术回归社会分工需求的一种体现,即能满足不同领域的需求。

由于开源自由软件思想的流行,在某种程度上来说,数据库系统可以说是属于闭源封闭系统!对于特定要求来说,会更加专业先进!

什么是闭源软件?什么是封闭系统?闭源软件代表这个产品公司从未对外公开,封闭系统代表其生态不需要加入任何的辅助内容!闭源封闭系统可以说公司意向于做平台方!

MySQL 引擎支持

在 MySQL 8.0版本中,支持以下处理引擎,MySQL默认并且一般使用 InnoDB 引擎!

特别提醒,引擎是注册在表上而非数据库上的!

  1. MEMORY
    • 数据存储在内存中,适合临时表和缓存。不支持事务,适用于需要高速访问数据的场景‌
  2. MRG_MYISAM
    • 用于将多个MyISAM表视为一个单一表,适合大数据量的汇总查询‌
  3. CSV
    • 常见于OFFICE办公使用
  4. FEDERATED
    • 【此引擎被标注为无支持】 允许访问远程服务器上的表,适合分布式数据库应用‌
  5. PERFORMANCE_SCHEMA
    • 用于收集数据库服务器的性能参数,帮助分析数据库服务的性能问题‌
  6. MyISAM
    • 强调快速读取和插入,但不支持事务。适合读密集型应用‌
  7. InnoDB
    • 【默认引擎】 支持事务处理和行级锁,适合高并发和数据完整性要求高的场景
  8. BLACKHOLE
    • 写入操作会被忽略,常用于测试场景‌
  9. ARCHIVE
    • 专门设计用于归档数据,支持高压缩比,适合存储大量不经常查询的数据‌

查询MySQL支持的全部引擎

sql 复制代码
SHOW ENGINES \G;

查询默认的存储引擎

SHOW VARIABLES; 是查询当前应用的默认配置的命令。如果因为版本原因无法输出结果,请直接运行此命令

sql 复制代码
# MySQL 8.0 查询
SHOW VARIABLES LIKE 'default_storage_engine%';

# 较低版本
SHOW VARIABLES LIKE 'storage_engine%';

查询表应用的存储引擎

关键词就是

SHOW CREATE [DATABASE/TABLE] [name] [options]

sql 复制代码
SHOW CREATE TABLE maic_user \G;

更换存储引擎

  1. 在创建表时设置(推荐)
sql 复制代码
CREATE TABLE tmp_table (
    id INT PRIMARY KEY,
    data VARCHAR(100)
) ENGINE=MyISAM;
  1. 事后更改

引擎因为需求而有所不同,并不是所有的存储引擎都兼容所有的表选项,因而不推荐这种做法!

sql 复制代码
ALTER TABLE tmp_table ENGINE=InnoDB;

引擎介绍

由于年度计划安排,介绍主要聚焦于单机存储方式。InnoDB、MyISAM、MEMORY的存储交流将被我们介绍。

InnoDB

InnoDB 在 MySQL 上第一个提供 外键约束(FOREIGN KEY) 的引擎,对事务(业务逻辑)的处理相较下显优异。

创建的表存储于 frm 文件当中,数据和索引分别存储于表 innodb_data_home_dir & innodb_data_file_path。

  • 优点如下
    • 值得称赞的事务管理
    • 崩溃修复能力
    • 并发控制能力
  • 缺点如下
    • 读写性能较差
    • 数据占用较大

推荐应用场景(技术):

  1. ACID事务支持、崩溃修复、并发控制能力适用于数据安全性要求相对较高的环境
  2. 要求事务请求能够 提交(Commit/Ctrl+S) 与 回滚(Rollback/Ctrl+Z)

落地实例

  1. 网站后台
  2. 电商私域

MyISAM

MyISAM 曾是MySQL默认存储引擎,拥有三种存储格式支持:

修订提醒\] 大部分内容并不属于业务常用的取值,业务详细取值参考 [编码格式介绍](./FreeSQL.md)

  1. 静态存储
    1. 除去 VARCHAR(通用,动态可变长度) / xBLOB(动态二进制) / xTEXT(动态字符串) 动态关键词关键词,默认应用的是静态!
    2. 在此范围内性能表现最佳!
  2. 动态存储
    1. 出现动态关键词,默认使用此存储
    2. 自动压缩存储空间,但如果字段(表结构)发生改动,碎片会堆叠,最终导致性能下降!
    3. OPTIMIZE TABLE table_name;可以回收碎片,但不适用于高并发环境!由于表级锁机制,MyISAM并没有那么适合所谓的并发环境。
  3. 压缩存储
    1. 如果表只读(摘录等),可以用 myisampack 将其压缩,在硬件对等的条件下,读取性能提升显著

文件包括三部分:frm,MYD(data),MYI(index)

推荐应用场景(技术):

  1. 占用空间小,处理速度快(限制参考上述内容)

落地实例:

  1. 图书馆系统

MEMORY

MEMORY 的玩法独树一帜,是在内存当中创建表,存放数据的操作。但需要注意,这没有保底机制,内存(RAM)断电或溢出(OOM)即失联!

建立在内存当中默认HASH为索引,也可以选择BTREE作为索引。MEMORY即以速度为优先。但惯用为临时创建,即用即销。(部分聊天、密话软件采用了它)

优点(可能):

  1. 相对来说,此优点在于不会与业务逻辑产生实际性的影响。

以上存储引擎只介绍了其特定表现点,不代表最终意见,请坚持具体问题具体讨论!

相关推荐
嵌入式×边缘AI:打怪升级日志2 小时前
Makefile 完全学习笔记:从入门到通用模板解析
笔记·学习
昵称暂无12 小时前
分布式事务难题:Seata框架在微服务中的落地实践
分布式·微服务·架构
ChatInfo2 小时前
Etsy 把 1000 个 MySQL 分片迁进 Vitess:425TB 数据背后的真正问题不是性能,而是运维规模
数据库·人工智能·mysql
程序员老邢2 小时前
【技术底稿 11】内网私有 Docker 镜像仓库 Registry2 全流程部署(多机共享,告别离线拷贝)
运维·docker·容器·架构·devops
SccTsAxR2 小时前
算法进阶:贪心策略证明全攻略与二进制倍增思想深度解析
c++·经验分享·笔记·算法
CoderMeijun2 小时前
CMake 入门笔记
c++·笔记·编译·cmake·构建工具
zhangrelay2 小时前
蓝桥云课一分钟-星界战纪-Stellar Combat-make
笔记·学习
cui_win2 小时前
Ollama 实战笔记:本地大模型安装配置全教程
笔记·ollama
SPC的存折2 小时前
6、MySQL设置TLS加密访问
linux·运维·服务器·数据库·mysql