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中myisam,innodb和memory三个存储引擎的区别