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、对于小数据的临时表,占用内存有限