当前位置:数据库 > > 正文

mysql存储引擎的创建与修改(关于MySQL Memory存储引擎的相关知识)

时间:2022-03-30 20:49:57类别:数据库

mysql存储引擎的创建与修改

关于MySQL Memory存储引擎的相关知识

关于Memory存储引擎的知识点

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

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

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

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

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

Innodb和memory存储引擎的区别

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

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 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的环境下,从库宕机有可能污染主库的临时表数据,是比较危险的操作。

    以上就是关于MySQL Memory存储引擎的相关知识的详细内容,更多关于MySQL Memory存储引擎的资料请关注开心学习网其它相关文章!

    原文链接:https://cloud.tencent.com/developer/article/1651589

    上一篇下一篇

    猜您喜欢

    热门推荐