前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Memory存储引擎的知识点

关于Memory存储引擎的知识点

作者头像
AsiaYe
发布2020-06-28 16:13:46
1.1K0
发布2020-06-28 16:13:46
举报
文章被收录于专栏:DBA随笔

关于Memory存储引擎的知识点

Memory存储引擎在日常的工作中使用的是比较少的,但是在MySQL的某些语法中,会用到memory引擎的内存表,它有以下几个特点:

1、内存表的建表语法是create table … engine=memory。

2、这种表的数据都保存在内存里,系统重启的时候会被清空,但是表结构还在。

2、Memory存储引擎的数据和索引是分开的。memory存储引擎的表也可以有主键,主键id上存储的是每个数据的位置,主键id是哈希索引,索引上的key也不是连续的。

这种数据和索引分开存放的数据组织形式,我们称之为"堆组织表",这点区别于Innodb 存储引擎的"索引组织表"

Innodb和memory存储引擎的区别

1、Memory存储引擎的数据存储顺序和插入顺序相同,而innodb存储引擎的数据存储顺序是按照聚集索引有序排列的。举例如下:

代码语言:javascript
复制
mysql> create table t1(id int primary key, c int) engine=Memory;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(0,0);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+----+------+
| id | c    |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
|  6 |    6 |
|  7 |    7 |
|  8 |    8 |
|  9 |    9 |
|  0 |    0 |
+----+------+
10 rows in set (0.00 sec)


mysql> create table t2(id int primary key, c int) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t2 values(1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(0,0);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0


mysql> select *from t2;
+----+------+
| id | c    |
+----+------+
|  0 |    0 |
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
|  6 |    6 |
|  7 |    7 |
|  8 |    8 |
|  9 |    9 |
+----+------+
10 rows in set (0.00 sec)

可以看到,memory存储引擎的结果中,(0,0)这条记录是在最后面的,和插入顺序一致,而innodb存储引擎的结果中,是按照记录的顺序进行排列的。

2、当数据文件有空洞的时候,innodb存储引擎插入数据需要在指定的位置插入,而memory存储引擎只要找到空隙就可以插入

3、当数据位置发生变化的时候,memory存储引擎需要修改所有的索引,而innodb存储引擎仅需要修改主键索引即可。

4、innodb存储引擎查询的时候有"回表",而memory存储引擎不需要回表。

5、innodb存储引擎支持varchar,而memory存储引擎不支持,所有的varchar都当做char处理,除此之外,memory存储引擎还不支持blob和text字段。

6、范围查询的时候,memory存储引擎无法支持。因为它的索引类型是哈希索引

在生产环境上,一般不建议使用内存表,理由主要有以下两点:

1、内存表不支持行锁,只支持表锁,一旦该表有更新,就会阻塞该表的其他操作,包括读操作;这就意味着这种表的并发性能不好。

2、数据持久性不好,一旦数据库宕机,内存表中的数据会丢失,他会忘往binlog中写入一条delete from table的语句,但是表结构还是存在的。这个delete语句在双M的环境下,从库宕机有可能污染主库的临时表数据,是比较危险的操作。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于Memory存储引擎的知识点
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档