准备
我们先来创建两张表,一张表使用InnoDB引擎,一张表使用Memory引擎。
CREATE TABLE t1 ( id INT, c INT, PRIMARY KEY ( id ) ) ENGINE = MEMORY;
CREATE TABLE t2 ( id INT, c INT, PRIMARY KEY ( id ) ) ENGINE = INNODB;
默认的索引结构
我们都知道InnoDB引擎是使用B+树的索引结构,而Memory引擎则是使用Hash索引。
对于B+树来说,我们都知道数据是存储在索引树中,并且按照索引值的顺序存储。
而对于Hash索引来说,数据和索引结构是分开的,数据直接用数组来存储,索引值则是经过Hash计算后存储,并指向数据的存储位置。
B+树
Hash索引
索引检索顺序的区别
分别插入3条数据
insert into t1 values(2,2),(3,3),(1,1);
insert into t2 values(2,2),(3,3),(1,1);
接下来查询
select * from t1;
select * from t2;
t1表的查询结构
t2表的查询结构
可以看出InnoDB引擎的表默认查询出来的顺序是按照索引组织的顺序,而Memory引擎则是按照数据插入的顺序。
数据插入
对于InnoDB来说,数据必须按照顺序存储,而Memory则可以直接在有空位置的地方插入。
分别删除两张表中id为2的数据
delete from t1 where id = 2;
delete from t2 where id = 2;
然后再插入数据4
insert into t1 values(4,4);
insert into t2 values(4,4);
最后查询结果
select * from t1;
select * from t2;
t1表的查询结构
t2表的查询结构
可以看到,Memory引擎直接在原来id为2的位置插入了元素,而InnoDB引擎还是插到后面,从这方面来看,InnoDB引擎相比Memory引擎会造成一些数据空洞。
数据类型
因为Memory引擎使用数组的方式存储,所以对于不能确定存储空间的数据类型是不支持的,比如: BLOB和TEXT