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

news2025/5/11 10:45:33

📢博客主页: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: 0

mysql> 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表的替代方案可以使用表分区,可以支持主键索引,唯一索引,全文索引等,我们在分库分表与表分区专题中介绍


👥总结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2373057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录第41天:图论2(岛屿系列)

一、岛屿数量(Kamacoder 99) 深度优先搜索: # 定义四个方向:右、下、左、上,用于 DFS 中四向遍历 direction [[0, 1], [1, 0], [0, -1], [-1, 0]]def dfs(grid, visited, x, y):"""对一块陆地进行深度…

VUE CLI - 使用VUE脚手架创建前端项目工程

前言 前端从这里开始,本文将介绍如何使用VUE脚手架创建前端工程项目 1.预准备(编辑器和管理器) 编辑器:推荐使用Vscode,WebStorm,或者Hbuilder(适合刚开始练手使用),个…

Java EE初阶——初识多线程

1. 认识线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 基本概念:一个进程可以包含多个线程,这些线程共享进程的资源,如内存空间、文件描述符等,但每个线程都有自己独…

如何删除网上下载的资源后面的文字

这是我在爱给网上下载的音效资源,但是发现资源后面跟了一大段无关紧要的文本,但是修改资源名称后还是有。解决办法是打开属性然后删掉资源的标签即可。

FPGA图像处理(5)------ 图片水平镜像

利用bram形成双缓冲,如下图配置所示: wr_flag 表明 buffer0写 还是 buffer1写 rd_flag 表明 buffer0读 还是 buffer1读 通过写入逻辑控制(结合wr_finish) 写哪个buffer ;写地址 进而控制ip的写使能 通过状态缓存来跳转buffer的…

day21python打卡

知识点回顾: LDA线性判别PCA主成分分析t-sne降维 还有一些其他的降维方式,也就是最重要的词向量的加工,我们未来再说 作业: 自由作业:探索下什么时候用到降维?降维的主要应用?或者让ai给你出题&…

ERP学习(一): 用友u8安装

安装: https://www.bilibili.com/video/BV1Pp4y187ot/?spm_id_from333.337.search-card.all.click&vd_sourced514093d85ee628d1f12310b13b1e59b 我个人用vmware16,这位up已经把用友软件和环境(sqlserver2008) 都封城vmx文件了…

01 | 大模型微调 | 从0学习到实战微调 | AI发展与模型技术介绍

一、导读 作为非AI专业技术开发者(我是小小爬虫开发工程师😋) 本系列文章将围绕《大模型微调》进行学习(也是我个人学习的笔记,所以会持续更新),最后以上手实操模型微调的目的。 (本文如若有…

海康相机无损压缩

设置无损压缩得到更高的带宽和帧率!

从机器人到调度平台:超低延迟RTMP|RTSP播放器系统级部署之道

✅ 一、模块定位:跨平台、超低延迟、系统级稳定的音视频直播播放器内核 在无人机、机器人、远程操控手柄等场景中,低延迟的 RTSP/RTMP 播放器并不是“可有可无的体验优化”,而是系统能否闭环、操控是否安全的关键组成。 Windows和安卓播放RT…

研发效率破局之道阅读总结(5)管理文化

研发效率破局之道阅读总结(5)管理文化 Author: Once Day Date: 2025年5月10日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 程序的艺术_Once-Day…

单因子实验 方差分析

本文是实验设计与分析(第6版,Montgomery著傅珏生译)第3章单因子实验 方差分析python解决方案。本文尽量避免重复书中的理论,着于提供python解决方案,并与原书的运算结果进行对比。您可以从 下载实验设计与分析(第6版&a…

Bitacora:基因组组件中基因家族识别和注释的综合工具

软件教程 | Bitacora:基因组组件中基因家族识别和注释的综合工具 https://zhangzl96.github.io/tags#生物信息工具) 📅 官方地址:https://github.com/molevol-ub/bitacora 🔬 教程版本:BITACORA 1.4 📋 …

【WebRTC-13】是在哪,什么时候,创建编解码器?

Android-RTC系列软重启,改变以往细读源代码的方式 改为 带上实际问题分析代码。增加实用性,方便形成肌肉记忆。同时不分种类、不分难易程度,在线征集问题切入点。 问题:编解码器的关键实体类是什么?在哪里&什么时候…

青少年编程与数学 02-019 Rust 编程基础 01课题、环境准备

青少年编程与数学 02-019 Rust 编程基础 01课题、环境准备 一、Rust核心特性应用场景开发工具社区与生态 二、Rust 和 Python 比较1. **内存安全与并发编程**2. **性能**3. **零成本抽象**4. **跨平台支持**5. **社区与生态系统**6. **错误处理**7. **安全性**适用场景总结 三、…

Redis持久化存储介质评估:NFS与Ceph的适用性分析

#作者:朱雷 文章目录 一、背景二、Redis持久化的必要性与影响1. 持久化的必要性2. 性能与稳定性问题 三、NFS作为持久化存储介质的问题1. 性能瓶颈2. 数据一致性问题3. 存储服务单点故障4. 高延迟影响持久化效率.5. 吞吐量瓶颈 四、Ceph作为持久化存储介质的问题1.…

Ceph 原理与集群配置

一、Ceph 工作原理 1.1.为什么学习 Ceph? 在学习了 NFS 存储之后,我们仍然需要学习 Ceph 存储。这主要是因为不同的存储系统适用于不同的场景,NFS 虽然有其适用之处,但也存在一定的局限性。而 Ceph 能够满足现代分布式、大规模、…

天线的PCB设计

目录 天线模块设计的重要性 天线模块的PCB设计 天线模块设计的重要性 当智能手表突然断连、无人机信号飘忽不定——你可能正在经历一场来自天线模块的"无声抗议"。这个隐藏在电子设备深处的关键组件,就像数字世界的隐形信使,用毫米级的精密结…

C++笔记-set和map的使用(包含multiset和multimap的讲解)

1.序列式容器和关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关系&#xff0…

Linux `ifconfig` 指令深度解析与替代方案指南

Linux `ifconfig` 指令深度解析与替代方案指南 一、核心功能与现状1. 基础作用2. 版本适配二、基础语法与常用操作1. 标准语法2. 常用操作速查显示所有接口信息启用/禁用接口配置IPv4地址修改MAC地址(临时)三、高级配置技巧1. 虚拟接口创建2. MTU调整3. 多播配置4. ARP控制四…