InnoDB引擎与Memory引擎对比

准备

我们先来创建两张表,一张表使用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

在这里插入图片描述

Guess you like

Origin blog.csdn.net/CSDN_WYL2016/article/details/120377768