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


👥总结

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

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

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

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

相关文章

5.Redission

5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如 HashTable 这样的代码中,他的方法都是使用 sync…

C语言主要标准版本的演进与核心区别的对比分析

以下是C语言主要标准版本的演进与核心区别的对比分析 K&R C(1978年) 定位‌:非标准化的原始版本,由Brian Kernighan和Dennis Ritchie定义 特性‌: 基础语法:函数声明无参数列表(如int func…

【C++设计模式之Template Method Pattern】

C设计模式之Template Method Pattern 模式定义核心思想动机(Motivation)结构(Structure)实现步骤应用场景要点总结 模式定义 模式定义: 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子…

【动态导通电阻】p-GaN HEMTs正向和反向导通下的动态导通电阻

2024 年,浙江大学的 Zonglun Xie 等人基于多组双脉冲测试方法,研究了两种不同技术的商用 p-GaN 栅极 HEMTs 在正向和反向导通模式以及硬开关和软开关条件下的动态导通电阻(RON)特性。实验结果表明,对于肖特基型 p-GaN 栅极 HEMTs,反向导通时动态 RON 比正向导通高 3%-5%;…

PDFMathTranslate:科学 PDF 文件翻译及双语对照工具

PDFMathTranslate:科学 PDF 文件翻译及双语对照工具 在科研和学习过程中,我们经常会遇到大量的英文 PDF 文献,翻译这些文献成为了一项繁琐且耗时的工作。PDFMathTranslate 是一款强大的科学 PDF 文件翻译及双语对照工具,它能够保…

Flutter PIP 插件 ---- 为iOS 重构PipController, Demo界面,更好的体验

接上文 Flutter PIP 插件 ---- 新增PipActivity,Android 11以下支持自动进入PIP Mode 项目地址 PIP, pub.dev也已经同步发布 pip 0.0.3,你的加星和点赞,将是我继续改进最大的动力 在之前的界面设计中,还原动画等体验一…

【Ansible】之inventory主机清单

前言 本篇博客主要解释Ansible主机清单的相关配置知识 一、inventory 主机清单 Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。 如果是名称类似的主机,可以使用列表的方式表示各个主机…

基于几何布朗运动的股价预测模型构建与分析

基于几何布朗运动的股价预测模型构建与分析 摘要 本文建立基于几何布朗运动的股价预测模型,结合极大似然估计与蒙特卡洛模拟,推导股价条件概率密度函数并构建动态预测区间。实证分析显示模型在标普500指数预测中取得89%的覆盖概率,波动率估…

【前端】【JavaScript】【总复习】四万字详解JavaScript知识体系

JavaScript 前端知识体系 📌 说明:本大纲从基础到高级、从语法到应用、从面试到实战,分层级讲解 JavaScript 的核心内容。 一、JavaScript 基础语法 1.1 基本概念 1.1.1 JavaScript 的发展史与用途 1. 发展简史 1995 年:JavaS…

[Java实战]Spring Boot 3 整合 Apache Shiro(二十一)

[Java实战]Spring Boot 3 整合 Apache Shiro(二十一) 引言 在复杂的业务系统中,安全控制(认证、授权、加密)是核心需求。相比于 Spring Security 的重量级设计,Apache Shiro 凭借其简洁的 API 和灵活的扩…

PyTorch API 6 - 编译、fft、fx、函数转换、调试、符号追踪

文章目录 torch.compiler延伸阅读 torch.fft快速傅里叶变换辅助函数 torch.func什么是可组合的函数变换?为什么需要可组合的函数变换?延伸阅读 torch.futurestorch.fx概述编写转换函数图结构快速入门图操作直接操作计算图使用 replace_pattern() 进行子图…

可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse

可观测性(Observability)是指通过系统的外部输出数据,推断其内部状态的能力。可观测性平台通过采集、存储、可视化分析三大可观测性数据:日志(Logging)、链路追踪(Tracing)和指标&am…

机器人厨师上岗!AI在餐饮界掀起新风潮!

想要了解人工智能在其他各个领域的应用,可以查看下面一篇文章 《AI在各领域的应用》 餐饮业是与我们日常生活息息相关的行业,而人工智能(AI)正在迅速改变这个传统行业的面貌。从智能点餐到食材管理,再到个性化推荐&a…

Linux动态库静态库总结

静态库生成 g -c mylib.cpp -o mylib.o ar rcs libmylib.a mylib.o 动态库生成 g -fPIC -shared mylib.cpp -o libmylib.so -fPIC:生成位置无关代码(Position-Independent Code),对动态库必需。 库文件使用: 静态库&…

通过user-agent来源判断阻止爬虫访问网站,并防止生成[ error ] NULL日志

一、TP5.0通过行为&#xff08;Behavior&#xff09;拦截爬虫并避免生成 [ error ] NULL 错误日志 1. 创建行为类&#xff08;拦截爬虫&#xff09; 在 application/common/behavior 目录下新建BlockBot.php &#xff0c;用于识别并拦截爬虫请求&#xff1a; <?php name…

OpenHarmony平台驱动开发(十五),SDIO

OpenHarmony平台驱动开发&#xff08;十五&#xff09; SDIO 概述 功能简介 SDIO&#xff08;Secure Digital Input and Output&#xff09;由SD卡发展而来&#xff0c;与SD卡统称为MMC&#xff08;MultiMediaCard&#xff09;&#xff0c;二者使用相同的通信协议。SDIO接口…

使用FastAPI和React以及MongoDB构建全栈Web应用03 全栈开发快速入门

一、什么是全栈开发 A full-stack web application is a complete software application that encompasses both the frontend and backend components. It’s designed to interact with users through a web browser and perform actions that involve data processing and …

Coco AI 开源应用程序 - 搜索、连接、协作、您的个人 AI 搜索和助手,都在一个空间中。

一、软件介绍 文末提供程序和源码下载 Coco AI 是一个统一的搜索平台&#xff0c;可将您的所有企业应用程序和数据&#xff08;Google Workspace、Dropbox、Confluent Wiki、GitHub 等&#xff09;连接到一个功能强大的搜索界面中。此存储库包含为桌面和移动设备构建的 Coco 应…

CSS经典布局之圣杯布局和双飞翼布局

目标&#xff1a; 中间自适应&#xff0c;两边定宽&#xff0c;并且三栏布局在一行展示。 圣杯布局 实现方法&#xff1a; 通过float搭建布局margin使三列布局到一行上relative相对定位调整位置&#xff1b; 给外部容器添加padding&#xff0c;通过相对定位调整左右两列的…

# 实时英文 OCR 文字识别:从摄像头到 PyQt5 界面的实现

实时英文 OCR 文字识别&#xff1a;从摄像头到 PyQt5 界面的实现 引言 在数字化时代&#xff0c;文字识别技术&#xff08;OCR&#xff09;在众多领域中发挥着重要作用。无论是文档扫描、车牌识别还是实时视频流中的文字提取&#xff0c;OCR 技术都能提供高效且准确的解决方案…