Work with MySQL < Frame_ENGINES
存储引擎是辅助处理数据存储的一个核心,作为软件组合当中的存储核心而存在。又称为 表类型(储存表和操作表)。Oracle 和 SQL Server等服务器通常只存在一个引擎,而MySQL提供了多个。
⚠️ 这并非意味着 MySQL 的功能领先于其他SQL服务,只是在设计层面与可拓展的潜力领先于其他。对应不同领域而言只有最适合,没有最优秀的说法!
我们推荐了解 C 语言的基础标准后,再看此篇,否则割裂的观感不佳!
关于存储概述的理念
本节我们将叙述有关于存储的概念,以方便后续的深入学习。仅查询请直接跳转至 "MySQL 引擎支持"小节。
程序的运行 严格遵守 着四个步骤,按顺序分别是:输入 、存储 、处理 、输出。而一套系统则是在这个过程当中不断循环。一般用户是无法直接参与程序存储的过程的。
MySQL 是一个综合的存储服务,数据库系统之所以能位列文件管理系统之后,是技术回归社会分工需求的一种体现,即能满足不同领域的需求。
由于开源自由软件思想的流行,在某种程度上来说,数据库系统可以说是属于闭源封闭系统!对于特定要求来说,会更加专业先进!
什么是闭源软件?什么是封闭系统?闭源软件代表这个产品公司从未对外公开,封闭系统代表其生态不需要加入任何的辅助内容!闭源封闭系统可以说公司意向于做平台方!
MySQL 引擎支持
在 MySQL 8.0版本中,支持以下处理引擎,MySQL默认并且一般使用 InnoDB 引擎!
特别提醒,引擎是注册在表上而非数据库上的!
- MEMORY
- 数据存储在内存中,适合临时表和缓存。不支持事务,适用于需要高速访问数据的场景
- MRG_MYISAM
- 用于将多个MyISAM表视为一个单一表,适合大数据量的汇总查询
- CSV
- 常见于OFFICE办公使用
- FEDERATED
- 【此引擎被标注为无支持】 允许访问远程服务器上的表,适合分布式数据库应用
- PERFORMANCE_SCHEMA
- 用于收集数据库服务器的性能参数,帮助分析数据库服务的性能问题
- MyISAM
- 强调快速读取和插入,但不支持事务。适合读密集型应用
- InnoDB
- 【默认引擎】 支持事务处理和行级锁,适合高并发和数据完整性要求高的场景
- BLACKHOLE
- 写入操作会被忽略,常用于测试场景
- 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;
更换存储引擎
- 在创建表时设置(推荐)
sql
CREATE TABLE tmp_table (
id INT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MyISAM;
- 事后更改
引擎因为需求而有所不同,并不是所有的存储引擎都兼容所有的表选项,因而不推荐这种做法!
sql
ALTER TABLE tmp_table ENGINE=InnoDB;
引擎介绍
由于年度计划安排,介绍主要聚焦于单机存储方式。InnoDB、MyISAM、MEMORY的存储交流将被我们介绍。
InnoDB
InnoDB 在 MySQL 上第一个提供 外键约束(FOREIGN KEY) 的引擎,对事务(业务逻辑)的处理相较下显优异。
创建的表存储于 frm 文件当中,数据和索引分别存储于表 innodb_data_home_dir & innodb_data_file_path。
- 优点如下
- 值得称赞的事务管理
- 崩溃修复能力
- 并发控制能力
- 缺点如下
- 读写性能较差
- 数据占用较大
推荐应用场景(技术):
- ACID事务支持、崩溃修复、并发控制能力适用于数据安全性要求相对较高的环境
- 要求事务请求能够 提交(Commit/Ctrl+S) 与 回滚(Rollback/Ctrl+Z)
落地实例
- 网站后台
- 电商私域
MyISAM
MyISAM 曾是MySQL默认存储引擎,拥有三种存储格式支持:
修订提醒\] 大部分内容并不属于业务常用的取值,业务详细取值参考 [编码格式介绍](./FreeSQL.md)
- 静态存储
- 除去 VARCHAR(通用,动态可变长度) / xBLOB(动态二进制) / xTEXT(动态字符串) 动态关键词关键词,默认应用的是静态!
- 在此范围内性能表现最佳!
- 动态存储
- 出现动态关键词,默认使用此存储
- 自动压缩存储空间,但如果字段(表结构)发生改动,碎片会堆叠,最终导致性能下降!
OPTIMIZE TABLE table_name;可以回收碎片,但不适用于高并发环境!由于表级锁机制,MyISAM并没有那么适合所谓的并发环境。
- 压缩存储
- 如果表只读(摘录等),可以用 myisampack 将其压缩,在硬件对等的条件下,读取性能提升显著
文件包括三部分:frm,MYD(data),MYI(index)
推荐应用场景(技术):
- 占用空间小,处理速度快(限制参考上述内容)
落地实例:
- 图书馆系统
MEMORY
MEMORY 的玩法独树一帜,是在内存当中创建表,存放数据的操作。但需要注意,这没有保底机制,内存(RAM)断电或溢出(OOM)即失联!
建立在内存当中默认HASH为索引,也可以选择BTREE作为索引。MEMORY即以速度为优先。但惯用为临时创建,即用即销。(部分聊天、密话软件采用了它)
优点(可能):
- 相对来说,此优点在于不会与业务逻辑产生实际性的影响。
以上存储引擎只介绍了其特定表现点,不代表最终意见,请坚持具体问题具体讨论!