区别
- Memory引擎中使用的是内存表;InnoDB中表存放在磁盘中。
- A) InnoDB使用“索引组织表”:是将数据存放在主键索引上的(数据位置在磁盘中改变,只需要修改主键索引),其他索引指向主键id;
B) Memory使用的是“堆组织表”:是将数据单独存放在一块内存中,每一个索引都指向数据 在内存中的位置(数据位置在内存中改变后每一个索引都要修改)。
C) 所以查询数据时,InnoDB需要走一次或者两次索引,Memery统一走一次索引,再根据数据位置去内存中找数据。 - InnoDB表支持变长数据(varchar),Memory只支持定长数据(char),所以内存表每行数据长度相同(相同字段的值长度一致)。
- InnoDB表要保证数据有序插入,所以当之前的数据行被删除后,只会在当前最大的id行插入新的数据记录。而Memory内存表找到空行就会插入新数据(乱序插入)。
内存表的特点
- 内存表的优势:速度快,因为内存读写天然支持hash索引。
- 内存表的缺点:
a. 只能使用表锁,锁粒度过大,不适合高并发;
b. 持久化问题,数据库宕机或重启会丢失数据。
建议平时一般的表都是用InnoDB表,对于执行sql语句过程中可以使用内存临时表。
参考文章:
https://time.geekbang.org/column/article/80495