一.Memory内存组织结构
- 内存表的数据部分以数组方式单独存放,而主键id索引,存放的是每个数据的位置
- 主键id是hash索引,可以看到索引上的key并不是有序
索引类型 | 组织方式 | |
InnoDB索引 | 索引组织表(Index Organizied Table) | 数据放在主键索引上,其他索引上保存的是主键 id |
Memory索引 | 堆组织表(Heap Organizied Table) | Memory 引擎采用的是把数据单独存放,索引上保存数据位置的数据组织形式 |
二.InnoDB索引和Memory索引
- InnoDB表的数据是有序存放的,内存表的数据是按照写入顺序存放
- 当数据文件有空洞的时候,InnoDB表插入新数据的时候,为了保证数据有序性,固定位置写新值,而内存表找到空位可以插入新增
- 数据位置发生变化,InnoDB表只需修改主键索引,而内存表需要修改所有索引
- InnoDB表用主键索引查询需要走一次索引查询,用普通索引查询的时候,需要走两次索引查找,内存表所有索引的位置都是相同的
- InnoDB支持变长数据类型,不同记录的长度可能不同,
- 内存表不支持Blob和Text字段,固定长度字符串来存储,因此内存表的每行数据长度相同。
三.内存表B-Tree索引
- 内存表也支持B-Tree索引
- 内存表不支持行锁,只支持表锁
四.内存临时表和内存表的优势
- 临时表不会被其他线程访问没有并发性
- 临时表 重启后需要删除,清空数据
- 临时表不会影响主库用户线程