MySQL(一)之存储引擎类型

InnoDB:

  1. 经常更新的表,适合处理多重并发的更新请求。
  2. 支持事务。
  3. 可以从灾难中恢复(通过bin-log日志等)。
  4. 外键约束,支持外键。
  5. 支持自动增加列属性auto_increment。
  6. 索引结构为B+Tree
  7. 锁支持 行级,页级,表级
  8. 每个表有两个文件 .frm(表结构),ibd(数据索引文件)

InnoDB索引实现(聚集)

表数据文件本身就是 按B+Tree组织的一个索引结构文件

聚集索引——叶子节点包含了完整的数据记录

为什么InnoDB表必须有主键,并且推荐使用整形的自增主键?

  答案 

为什么非主键索引结构叶子节点存储的是主键值(一致性和节省存储空间)

 

 指针是双向的, 所以也适用于 where id<18,或者 where id>18

 

 

 

MyISAM:

MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。 

  1. 不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。
  2. 不支持外键的表设计。
  3. 查询速度很快 ,数据修改相对较少(阻塞问题),以读为主
  4. 对表进行加锁的场景。
  5. MyISAM极度强调快速读取操作。
  6. MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。
  7. 索引文件和数据文件是分离的, 每一个表三个文件.frm(表数据结构), .MYD(数据文件), .MYI(索引文件)

 

  

 

  

 

Memory存储引擎


 Memory存储引擎采用逻辑介质是内存,因此其访问速度会非常快,其默认使用的是hash索引,一旦服务关掉,数据就会丢失。Memory存储引擎要求存储的数据是长度不变的格式,比如blob和text类型都不可以

适合的场景:

1、适合保存目标数据比较小,并且频繁进行访问的,如果太大的话,容易造成内存溢出,通过max_heap_table_size来设定表的大小;

2、存储在Memory引擎的表中的数据,如果丢失也没有关系的

3、如果数据是临时的,必须立刻用的到,那么可以存在内存当中。   Memory存储引擎支持hash索引和B树索引,hash索引用来比较相等会比较快,范围查找会比较慢,B树索引可以部分查询和通配查询,也可以使用<,>,= 等方便数据挖掘。  Memory存储引擎创建的表,最好是使用完之后,就删除。 

 

虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。

第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。

 

posted @ 2019-08-21 17:29  暖暖-木木  阅读(442)  评论(0编辑  收藏  举报