MySQL存储引擎之Memory

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL存储引擎之Memory相关的知识,希望对你有一定的参考价值。

参考技术A 首先创建表

我们能够看到,表是不支持TEXT字段的

我们再看下文件系统

只有一个保存表结构的文件

下面我们再看下表的索引
首先,新建两个索引

我们查看当前索引类型

存在两个索引,一个为默认的,一个是指定的BTree。

接下来我们查看表的状态

Memory存储引擎表和临时表的区别

临时表分两类:系统使用临时表,create temporary table 建立的临时表。无论哪种表,只有当前session是可见的。而Memory表是所有线程都可以使用的。
系统使用临时表又分为两类:查过限制使用Myisam临时表,未超过限制使用Memory表。

使用场景

注意一点是:Memory数据易丢失,所以要求数据可再生

memory存储引擎是mysql中的一类特殊的存储引擎。其使用存储在内存中的内容来创建表,而且所有数据也放在内存中。这些特性都与InnoDB,MyISAM存储引擎不同。
OK,这里我们讲解一些memory存储引擎的文件存储形式,索引类型,存储周期和优缺点。

每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名与表名相同,类型为frm类型。该文件只存储表的结构,而其数据文件,都是存储在内存中的,这样有利于对数据的快速的处理,提高整个表的处理效率。

值得注意的是:服务器需要有足够的内存来维持memory存储引擎的表的使用。如果不需要了,可以释放这些内存,甚至可以删除不需要的表。

Memory存储引擎默认使用哈希(HASH)索引,其速度比使用B型树(BTREE)索引快。如果我们需要使用B型树索引,可以在创建索引时选择使用。

这里来整理一个小的技巧:

Memory存储引擎通常很少用到,至少我是没有用到过。因为Memory表的所有数据都是存储在内存上的,如果内存出现异常会影响到数据的完整性。

如果重启机器或者关机,表中的所有数据都将消失,因此,基于Memory存储引擎的表的生命周期都比较短,一般都是一次性的。

Memory表的大小是受到限制的,表的大小主要取决于2个参数,分别是max_rows和max_heap_table_size。其中,max_rows可以在创建表时指定,max_heap_table_size的大小默认为16MB,可以按需要进行扩大。

因此,其基于内存中的特性,这类表的处理速度会非常快,但是,其数据易丢失,生命周期短。基于其这个缺陷,选择Memory存储引擎时需要特别小心。

MySQL 存储引擎之Memory

• Memory存储引擎将所有数据存储在内存中以便加快对某些不重要数据的访
问速度
• 此存储引擎的使用范围已经变小,因为InnoDB已经提供了数据缓存区以便
对将经常访问的数据缓存在内存中
• 当MySQL重启时,Memory表中的数据会丢失,但表结构还在
• Memory只适用在只读表或者读操作占绝大多数的情况,因为对表的写操作
也会导致表锁,大大限制了并发性
• Memory表创建之后,在磁盘文件会生成一个相同表名的文件,后缀为.frm
,仅存储表结构而不存储表数据

[root@mysql-master ~]# mysql -u root -p
mysql> CREATE TABLE test(id int,name varchar(10)) ENGINE=MEMORY;
Query OK, 0 rows affected (0.11 sec)

mysql> insert into test values(1,a);
Query OK, 1 row affected (0.01 sec)

mysql> insert into test values(2,b);
Query OK, 1 row affected (0.01 sec)

mysql> select * from temp;
Empty set (0.01 sec)

mysql> select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | a    |
|    2 | b    |
+------+------+
2 rows in set (0.01 sec)

mysql> exit;
Bye
[root@mysql-master ~]# /etc/init.d/mysql.server restart 
Shutting down MySQL.... SUCCESS! 
Starting MySQL.. SUCCESS! 
[root@mysql-master ~]# mysql -u root -p
mysql> use course;
Database changed

mysql> select * from test;
Empty set (0.00 sec)

mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

 

以上是关于MySQL存储引擎之Memory的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL之存储引擎

mysql基础之存储引擎

mysql中myisam,innodb和memory三个存储引擎的区别

转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

浅谈MYSQL引擎之INNODB引擎

Mysql数据库3种存储引擎有啥区别?