暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql--------InnoDB那么好,那我们还是否需要Memory?

Lord Lean Notes 2020-02-19
316

InnoDB主键存储数据的方式是以B+树的方式来进行存储的,下图是其数据组织方式如下:

可以看到InnoDB中主键数据的组织方式是以有序的方式来存储的。当我们执行select *时,就会按照叶子节点从左到右依次扫描,所以0在第一个。
下图是Memory引擎数据组织方式:

我们可以看到其索引和数据是分开存储的,数据部分是以数组的方式来进行存储的,而主键id是hash索引,每个主键id中记录着对应数据的位置,并且主键id是无序的。当我们select *时,会顺序扫描数据数组,所以0是最后一个。

InnoDB数据组织方式是把数据放在主键索引上,其他索引存储着主键id,这种数据组织方式称为索引组织表。Memory数据组织方式是把数据单独存放,主键上记录着对应数据的位置,这种数据组织方式称为堆组织表。

InnoDB和Memory的不同:
  • InnoDB的数据都是有序的,而Memory的数据是以插入顺序来进行存储的

  • Memory在插入数据时,若表中有空位,就可以插入新值

  • 当数据位置发生变化时,InnoDB只需要修改主键,Memory需要修改整个索引

  • InnoDB主键索引查询时,需要走一次索引,而普通索引需要走两次索引查找,Memory中的索引查询时只需要走一次

  • InnoDB支持变长的数据,而Memory支持的数据长度都是固定的

Memory的锁粒度

Memory只支持表锁,不支持行锁。当这张表被操作时,就会立即阻塞其他操作。
数据持久化问题

Memory中的表数据都是存储在内存中的,当数据库发生异常重启时,所有的数据都会丢失,而在搭建主备的情况下,当主库发生异常时,主库发给从库的binlog日志会先删除内存表

文章转载自Lord Lean Notes,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论