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

【MySQL】存储引擎 - ARCHIVE、BLACKHOLE、MERGE详解

📢博客主页:https://blog.csdn.net/2301_779549673
📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📢本文由 JohnKi 原创,首发于 CSDN🙉
📢未来很长,值得我们全力奔赴更美好的生活✨

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、ARCHIVE 存储引擎的特性
  • 🏳️‍🌈二、创建 ARCHIVE 表
  • 🏳️‍🌈三、BLACKHOLE 存储引擎的特性
  • 🏳️‍🌈四、BLACKHOLE 存储引擎的用途
  • 🏳️‍🌈五、创建BLACKHOLE表
  • 🏳️‍🌈六、MERGE 存储引擎特性
  • 🏳️‍🌈七、创建MERGE表
  • 🏳️‍🌈八、操作 MERGE 表
  • 👥总结


使用 ARCHIVE 存储引擎创建的表,存储大量不被索引的数据且占用空间很小,一般用于归档数据的存储。

🏳️‍🌈一、ARCHIVE 存储引擎的特性

在这里插入图片描述

  1. 支持 INSERTREPLACESELECT,但不支持 DELETEUPDATE
  2. 支持列的 AUTO INCREMENT 属性,该列可以有唯一约束,且手动指定的值不能小于该列的最大值;
  3. 不支持索引,在任何列上尝试建立索引都会报错;
  4. 插入时,数据将被压缩,ARCHIVE 引擎使用 zlib 无损数据压缩; INSERT 语句只是将数据写入压缩缓冲区并且根据需要刷新到磁盘,当执行 SELECT 时会强制刷新缓冲区:
  5. 检索时,按需要进行解压缩,不支持行缓存;
  6. SELECT 操作执行全表扫描,找出当前查询的行,并读取行数;
  7. 使用行级锁定
  8. 不支持表分区

🏳️‍🌈二、创建 ARCHIVE 表

在MySQL 8.0中 InnoDB 是默认引擎,所以在创建表时需要指定 ENGINE=ARCHIVE

# 创建⼀个使⽤ARCHIVE存储引擎的表
CREATE TABLE t_archive (id int(11) UNIQUE AUTO_INCREMENT,name varchar(20)
) ENGINE = ARCHIVE;

创建 ARCHIVE 表会根据表名生成两个不同后缀名文件,

  • 分别是以 .ARZ 为后缀的数据文件,
  • .sdi 为后缀的表信息描述文件(JSON格式),
  • .ARN 文件在优化操作期间可能会出现。

在这里插入图片描述

🏳️‍🌈三、BLACKHOLE 存储引擎的特性

BLACKHOLE 存储引擎就像⼀个"⿊洞",接受数据,但不存储数据,检索时总是返回⼀个空结果

  • BLACKHOLE 表不会存储任何数据,但如果启用了基于语句的二进制日志记录,则会记录 SQL语句并将其复制到副本服务器
  • 支持索引;
  • 不支持分区;

🏳️‍🌈四、BLACKHOLE 存储引擎的用途

  • 验证转储⽂件语法
  • 通过⽐较启⽤和不启⽤⼆进制⽇志记录的性能,测量⼆进制⽇志记录的开销;
  • 本质上是⼀个 "⽆操作"的存储引擎,可⽤于查找与存储引擎本⾝⽆关的性能瓶颈

🏳️‍🌈五、创建BLACKHOLE表

  • 在MySQL 8.0中 InnoDB 是默认引擎,所以在创建表时需要指定 ENGINE=BLACKHOLE
  • 创建 BLACKHOLE 表时,服务器会在全局数据字典中创建表定义并⽣成 .sdi 为后缀的表信息描述⽂件
mysql> CREATE TABLE t_blackhole(id INT, content CHAR(10)) ENGINE = BLACKHOLE;
Query OK, 0 rows affected (0.03 sec)mysql> INSERT INTO t_blackhole VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0mysql> SELECT * FROM t_blackhole;
Empty set (0.00 sec)

在这里插入图片描述

🏳️‍🌈六、MERGE 存储引擎特性

MERGE 存储引擎,也称为 MRG_MyISAM 引擎,允许MySQL DBA或开发⼈员在逻辑上将⼀系列相同的MyISAM表分组,并将它们作为⼀个对象引⽤。适⽤于VLDB(Very Large Data Bases)环境,如数据仓库。这里的相同表示所有表中的列都有相同的数据类型和索引信息。

⽰意图如下

在这里插入图片描述

🏳️‍🌈七、创建MERGE表

  • 在MySQL8.0中 InnoDB 是默认引擎,所以在创建表时需要指定 ENGINE=MERGE
  • 创建MERGE表必须指定 UNION=(list-of-tables) 选项,表示要使用哪些MyISAM表;
  • 还可以通过指定 INSERT_METHOD 选项来控制如何对MERGE表进行插入操作,FIRSTLAST 值分别表示在第一个或最后一个基础表中进行插入
  • 如果没有指定 INSERT_METHOD 选项,或者指定它的值为 NO ,那么在 MERGE 表中执行插入将会报错;
# 创建基础表1
mysql> CREATE TABLE test_m1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
content CHAR(20)) ENGINE=MyISAM;# 创建基础表2
mysql> CREATE TABLE test_m2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
content CHAR(20)) ENGINE=MyISAM;# 向基础表中写⼊数据
mysql> INSERT INTO test_m1 (content) VALUES ('Testing1'),('table1'),('test_m1');
mysql> INSERT INTO test_m2 (content) VALUES ('Testing2'),('table2'),('test_m2');# 创建MERGE表
mysql> CREATE TABLE t_merge (
id INT NOT NULL AUTO_INCREMENT,
content CHAR(20), INDEX(id))
ENGINE=MERGE UNION=(test_m1,test_m2) INSERT_METHOD=LAST;

创建 MERGE 表时,会在磁盘上创建一个.mrg 文件,其中包含了基础MyISAM表的名称。
MERGE的表格式存储在MySOL数据字典中;
.sdi 为后缀的表信息描述文件;

在这里插入图片描述
在这里插入图片描述

🏳️‍🌈八、操作 MERGE 表

基础表中的 id 列作为 PRIMARY KEY 索引,但在MERGE表中并不作为主键,但是可以被索引。

因为 MERGE 表不能对基础表集强制唯一性,类似的,基础表中具有 UNIOUE 索引的列可以在 MERGE 表中被索引,但不能作为唯一约束

查询示例:

mysql> select * from t_merge;
+----+----------+
| id | content  |
+----+----------+
|  1 | Testing1 |
|  2 | table1   |
|  3 | test_m1  |
|  1 | Testing2 |
|  2 | table2   |
|  3 | test_m2  |
+----+----------+
6 rows in set (0.00 sec)

要将MERGE表重新映射到不同的MyISAM基础表集合,您可以使用以下方法之一

  • 删除 MERGE 表并重新创建:。
  • 使用 ALTER TABLE tbl name UNION=(..) 修改基础表的集合;
  • ALTER TABLE…UNION=()列表为空时,表示删除所有基础表

使用 DROP TABLE 只会删除 MERGE 表定义,基础 MyISAM 表不受影响。

关于MERGE表的替代方案可以使用表分区,可以支持主键索引,唯一索引,全文索引等,我们在分库分表与表分区专题中介绍


👥总结

本篇博文对 ? 做了一个较为详细的介绍,不知道对你有没有帮助呢

觉得博主写得还不错的三连支持下吧!会继续努力的~

相关文章:

  • 多模型协同预测在风机故障预测的应用(demo)
  • Java设计模式之抽象工厂模式:从入门到精通
  • 服务器配置错误导致SSL/TLS出现安全漏洞,如何进行排查?
  • 在自然语言处理任务中,像 BERT 这样的模型会在输入前自动加上一些特殊token
  • 从概念表达到安全验证:智能驾驶功能迎来系统性规范
  • 金仓数据库永久增量备份技术原理与操作
  • 如何清除windows 远程桌面连接的IP记录
  • 2025年5月通信科技领域周报(4.28-5.4):5G-A技术引领峰会通信 卫星通信加速全球化布局
  • Java socket获取gps定位
  • 【 Triton 教程】triton.heuristics
  • 2025 年数维杯数学建模B题完整论文代码模型
  • Vue 系列之:defineProps、defineEmits、...
  • Linux ifconfig命令详解
  • JavaSE核心知识点02面向对象编程02-03(抽象类与接口)
  • 数据中台建设系列(五):SQL2API驱动的数据共享与服务化实践
  • RAG优化知识库检索(1):基础概念与架构
  • 2025最新精选5款3DMAX建筑可视化插件
  • 【C/C++】为什么要noexcept
  • 不拆机查看电脑硬盘型号的常用方法
  • List<T>中每次取固定长度的数据
  • 马云再次现身阿里打卡创业公寓“湖畔小屋”,鼓励员工坚持创业精神
  • 中日有关部门就日本水产品输华问题进行第三次谈判,外交部回应
  • 晶圆销量上升,中芯国际一季度营收增长近三成,净利增超1.6倍
  • 波音公司计划于2027年交付新版“空军一号”飞机
  • 明星站台“胖都来”背后:百元起录视频,20万可请顶流
  • 普京:“胜利日停火”已开始生效