天机阁

MyISAM和InnoDB的区别

MyISAM和InnoDB的区别
2022-07-13 · 2 min read
MySQL

MySQL 5.5之前,默认的存储引擎一直是 MyISAM。
虽然 MyISAM 性能还行,各种特性也还不错(比如全文索引、压缩、空间函数等),但是 MyISAM 不支持事务和行级锁,更甚至崩溃后无法安全恢复。
因此 MySQL 5.5版本之后,引入了 InnoDB(事务性数据库引擎)作为默认的存储引擎。

下面来对比下这两个存储引擎:

  1. 是否支持行级锁
    MyISAM 只有表级锁(table-level locking),而 InnoDB 支持行级锁(row-level locking)和表级锁,而且默认为行级锁。
    也就是说,MyISAM 一锁就是锁住了整张表,在并发写的情况下非常影响性能。
  2. 是否支持事务
    MyISAM 不支持事务。
    InnoDB 提供事务支持,具有提交(commit)和回滚(rollback)事务的能力。
  3. 是否支持外键
    MyISAM 不支持,而 InnoDB 支持。
  4. 是否支持数据库异常崩溃后的安全恢复
    MyISAM 不支持,而 InnoDB 支持。
    使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证恢复到崩溃前的状态。这个恢复过程依赖于 redo log
  5. 是否支持 MVCC
    MyISAM 不支持,而 InnoDB 支持。
    MVCC 可以看作是行级锁的一个升级,可以有效减少加锁操作,提高性能。