关于MySQL Memory存储引擎的相关知识
关于Memory存储引擎的知识点
Memory存储引擎在日常的工作中使用的是比较少的,但是在MySQL的某些语法中,会用到memory引擎的内存表,它有以下几个特点:
1、内存表的建表语法是create table … engine=memory。
2、这种表的数据都保存在内存里,系统重启的时候会被清空,但是表结构还在。
2、Memory存储引擎的数据和索引是分开的。memory存储引擎的表也可以有主键,主键id上存储的是每个数据的位置,主键id是哈希索引,索引上的key也不是连续的。
这种数据和索引分开存放的数据组织形式,我们称之为"堆组织表",这点区别于Innodb 存储引擎的"索引组织表"
Innodb和memory存储引擎的区别
1、Memory存储引擎的数据存储顺序和插入顺序相同,而innodb存储引擎的数据存储顺序是按照聚集索引有序排列的。举例如下:
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: 0mysql> 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: 0mysql> 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)
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的环境下,从库宕机有可能污染主库的临时表数据,是比较危险的操作。
更多相关文章
- 转:Game Engines for Android(安卓)(Android游戏引擎)
- android 引擎
- Android学习笔记(18)————利用tts开发一个android发音字典
- libGDX引擎在android APP开发中应用系列-结合android原生app与lib
- 关于Android初学者的学习线路的相关知识
- android文本布局引擎
- Unity3d Free【IOS Android(安卓)WP8 Xbox】
- android 自带gps定位Location相关知识
- Android(安卓)2d物理引擎Box2d介绍