概述

主要关注 MyISAM 和 InnoDB

对比项

MyISAM

InnoDB

外键

不支持

支持外键

事务

不支持

支持事务

行表锁

表级锁,即使操作一条记录也会锁住整张表,不适合高并发操作

行级锁,数据更新时只锁某一行,不对其他行有影响,适合高并发操作

注意:数据插入时使用表锁

缓存

只缓存索引,不缓存真实数据

不仅缓存索引还要缓存真实数据,対内存要求较高,而且内存大小対性能有决定性影响

表空间


大,分为段->区->页(页大小 16KB)

页读入到内存匹配,读入一条记录和读入一页 (包括很多条记录)的 I/O 时间是一样的

关注点

性能

行级锁,事务,外键,ACID 约束,热备份和容灾,MVCC,聚集索引

应用场景

处理速度快,适合查询密集,占用空间小

不支持事务等特性,只支持表级锁

丰富的特性,高并发,适合更新密集,二次查找,读写效率差,占用空间大

InnoDB

InnoDB 使用的存储方式是聚簇索引,每个表有且仅有一个聚簇索引。

聚簇索引指不仅缓存索引还缓存真实数据。InnoDB 默认使用主键顺序 (可自定义索引)为行记录构建一颗 B+ 树。

聚簇索引的存储并不是物理上连续的,而是逻辑上连续的,叶子结点间按照主键顺序排序,通过双向链表连接。

非聚簇索引
也称为二次索引、辅助索引,同样是一棵 B+ 树,通过非聚簇索引查找主键,再通过主键 (作为索引)去聚簇索引内查找行记录。InnoDB 经过二次查找才可定位到行记录。

MyISAM

MyISAM 是顺序存储的,B+ 树叶节点存放的是行记录的物理地址,定位速度快

  • 同一数据库不同的表可以使用不同存储引擎,查询密集的表使用 MyISAM,临时表使用 Memory
  • 不同服务器的数据库可以使用不同存储引擎,读写分离场景,从数据库可以使用 MyISAM,提高查询速度