综述

在MySQL中,InnoDB和MyISAM应该是最广为人知的2种存储引擎。
对二者的特点做一个简单的整理。

InnoDB

  • 现阶段MySQL默认的存储引擎。

  • 采用MVCC来支持高并发

    Multi-Version Concurrency Control 多版本并发控制。
    MVCC会保存某个时间点上的数据快照。这意味着事务可以看到一个一致的数据视图,不管他们需要跑多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。

  • 实现了四个标准的隔离级别

  • 通过间隙锁防止幻读

    不仅锁定涉及的行,还会对索引中的间隙进行锁定。

  • 基于聚集索引建立表 ,二级索引必须包含主键列

  • 文件结构

    文件名 描述
    .frm 记录表结构的文件
    .idb 索引+数据:
    按照B+树索引组织文件,且数据保存在B+树的叶子节点中
  • 必须有主键,没有的话会自动生成,且建议使用自增整型:

    • 整型:占用内存小、比较速度快
    • 自增:有序,能降低B+树内部调整的次数,提高效率
      (新节点序号一定比老节点大,就不会插入到已存在的节点之间)

MyISAM

  • 5.1版本以前默认的引擎,逐渐被InnoDB取代

  • 不支持并发和行级锁

  • 对整张表加锁:

    锁类型 描述
    读取 共享锁
    支持并发插入(在读取的时候可以往表中插入数据)
    写入 排它锁
  • 文件结构

    文件名 描述
    .frm 记录表结构的文件
    .MYD 数据文件
    .MYI 索引文件
    在B+树的叶子节点通过指针指向.MYD文件中的数据