《MySQL——InnoDB与Memory以及临时表》

138 阅读2分钟

InooDB与Memory

数据组织方式不同:

  • InnoDB引擎把数据放在主键索引上,其他索引上保存的是主键id。为索引组织表
  • Memory引擎把数据单独存放,索引上保存数据位置。为堆组织表

典型不同处:

1、InnoDB表的数据总是有序存放的,而Memory表数据是按照写入顺序存放、

2、当数据文件有空洞时,InnoDB表在插入新数据时,为了保证数据有序性,总是放在右侧。而Memory表找到空位就可以插入

3、数据位置发生变化的时候,InnoDB表修改的是主键索引,Memory表需要修改索引值

4、InnoDB支持变长数据类型,不同记录的长度可能不同。Memory表使用固定长度,每行数据长度相同

Memory表默认使用的是hash索引,所以不支持范围查询,当然也可以修改:

alter table t1 add index a_btree_index using btree (id);

Memory 表用于临时表

Memory表有两个问题:

1、Memory不支持行锁,只支持表锁,不适用于并发场合
2、Memory数据放在内存中,数据库重启,所有Memory表都会被清空

Memory表用于临时表好处:

1、临时表不会被其他线程访问,没有并发性的问题

2、临时表重启后也是需要删除的,清空数据问题不大

3、备库的临时表也不会影响主库的用户线程

并且相对于InnoDB作为临时表,它还有以下好处:

1、Memory使用内存表不需要写磁盘,往临时表写数据速度更快

2、Memory索引使用hash索引,查找速度比B-Tree索引快

3、对于小数据的临时表,占用内存有限