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

【MySQL】存储引擎 - MEMORY详解

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

在这里插入图片描述

在这里插入图片描述

文章目录

  • 🏳️‍🌈一、使用场景
  • 🏳️‍🌈二、 MEMORY存储引擎的特性
  • 🏳️‍🌈三、创建MEMORY表
  • 🏳️‍🌈四、内存管理
  • 👥总结


使用 MEMORY 存储引擎(以前称为HEAP)创建的表,内容存储在内存中。当服务器由于硬件问题断电或其他原因崩溃时数据会丢失,因此这些表仅用作 临时工作区从其他表中提取数据的只读缓存

🏳️‍🌈一、使用场景

  • 涉及瞬时、非关键数据的操作,例如会话管理或需要缓存的数据,当服务器停止或重新启动时,MEMORY 表中的数据会丢失:
  • 用于快速访问和低延时,数据量可以完全放在物理内存中,不使用虚拟内存;只读或以读为主的数据访问场景(有限的更新)。

🏳️‍🌈二、 MEMORY存储引擎的特性

在这里插入图片描述

  • 使用固定长度的存储格式,可变长度类型,例如 VARCHAR 使用固定长度存储;
  • 不能包含 BLOBTEXT 列;
  • 支持 AUTO_INCREMENT 的列;
  • TEMPORARY MEMORY 表在所有客户端之间共享;
  • 支持 HASH 索引(默认)和 BTREE 索引;
  • 不支持表分区;
  • 由于使用单线程,在高负载的场景下可能会涉及严重的锁竞争,特别是在多个客户端并发执行更新操作的情况下,性能并不一定会比 InnoDB 更快。

🏳️‍🌈三、创建MEMORY表

在MySQL8.0中 InnoDB 是默认引擎,所以在创建表时需要指定 ENGINE=MEMORY:

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

在这里插入图片描述

创建表并加载数据

在这里插入图片描述
启动时填充 MEMORY 表的内容,可以使用 init_file 系统变量指定一个SQL文件,文件中可以编写用于初始化数据的SQL语句,例如: INSERTINTO...SELECTLOAD DATA

🏳️‍🌈四、内存管理

  • 删除单行数据,不会回收内存,只有删除整个表时才会回收内存。当不需要内存表的内容时,要释放该表所使用的所有内存,可以执行 DELETETRUNCATE table 删除所有行,或者使用 DROP table 删除表。如果要释放被删除行所使用的内存,使用 ALTER TABLE ENGINE=MEMORY 命令强制重建表;
  • 表中一行数据所需的内存使用以下表达式计算:
# 涉及到所有BTREE索引⻓度、所有的HASH索引⻓度、单⾏数据⻓度
SUM_OVER_ALL_BTREE_KEYS(max_length_of_key + sizeof(char*) * 4)
+ SUM_OVER_ALL_HASH_KEYS(sizeof(char*) * 2)
+ ALIGN(length_of_row+1, sizeof(char*))

ALIGN()函数的作用:使行长度为char类型大小的精确倍数。sizeof(char*)在32位机器上是4,在64位机器上是8。

  • max_heap_table_size 系统变量设置了内存表的最大大小限制,默认为 16MB,要控制单个表的最大大小,在创建每个表之前设置该变量的 session 值。(不要改变全局的 max_heap_table_size 值,除非要明确设置所有客户端创建的内存表),下面的示例创建了两个内存表,最大大小分别为 1MB2MB:
# 指定第⼀张表的内存最⼤值为1MB
mysql> SET max_heap_table_size = 1024*1024;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t1 (id INT, UNIQUE(id)) ENGINE = MEMORY;
Query OK, 0 rows affected (0.01 sec)# 指定第⼆张表的内存最⼤值为2MB
mysql> SET max_heap_table_size = 1024*1024*2;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE t2 (id INT, UNIQUE(id)) ENGINE = MEMORY;
Query OK, 0 rows affected (0.00 sec)

每次重启服务器内存表中的数据将被清空,内存表中的数据永远不会写入磁盘


👥总结

本篇博文对 【MySQL】存储引擎 - MEMORY详解 做了一个较为详细的介绍,不知道对你有没有帮助呢

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

http://www.xdnf.cn/news/4762.html

相关文章:

  • 【JS逆向基础】前端基础-HTML与CSS
  • 初学者的AI智能体课程:构建AI智能体的十堂课
  • SpringBoot 讯飞星火AI WebFlux流式接口返回 异步返回 对接AI大模型 人工智能接口返回
  • oracle 对一个字段的数据做排序 :值的依次排序为.“思考”->“asd”->“三点“
  • MySQL 8.0 OCP 英文题库解析(一)
  • Web开发-JavaEE应用SpringBoot栈ActuatorSwaggerHeapDump提取自动化
  • 【Bluedroid】 HID 设备应用注册与主机服务禁用流程源码解析
  • SpringBoot项目接入DeepSeek
  • 「Mac畅玩AIGC与多模态24」开发篇20 - 多语言输出工作流示例
  • 17.Java 注解与实例
  • C++回顾 Day4
  • 【Bootstrap V4系列】学习入门教程之 组件-轮播(Carousel)高级用法
  • 基于供热企业业务梳理的智能化赋能方案
  • 易境通散货拼柜系统:如何让拼箱货代协作效率翻倍?
  • 编程日志4.28
  • python23-函数返回值和参数处理,变量作用域
  • 记录学习的第三十五天
  • 2025-05-08-如何在一次 cmd 会话中批量设置多个 API key?
  • 英文论文查重笔记
  • 用3D slicer 去掉影像中的干扰体素而还原干净影像(脱敏切脸处理同)
  • 按拼音首字母进行排序组成新的数组(vue)
  • 强人工智能是否会诞生于现在的AI之中
  • 第二章 MySql
  • lc3341. 到达最后一个房间的最少时间 Ⅰ 算法解析
  • Red Hat linux环境openssh升级到openssh-10.0p1
  • FileInputStream
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(15):何と どういう
  • process-exporter服务安装并启动
  • 【C++游戏引擎开发】第32篇:物理引擎(Bullet)—约束系统
  • ollama+deepseek+openwebui安装