MySQL(一)之存储引擎类型

InnoDB:

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

InnoDB索引实现(聚集)

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

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

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

  答案 

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

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

MyISAM:

  1. 不支持事务的设计,但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。
  2. 不支持外键的表设计。
  3. 查询速度很快,如果数据库insert和update的操作比较多的话比较适用。
  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存储引擎创建的表,最好是使用完之后,就删除。 

原文地址:https://www.cnblogs.com/fanBlog/p/9754829.html