MySQL 支持哪些存储引擎?

  • MySQL 支持的引擎包括:InnoDB、MyISAM、MEMORY、Archive、Federate、CSV、BLACKHOLE 等;
  • MySQL5.5 之前的默认存储引擎是 MyISAM,5.5 之后就改为了 InnoDB。

MyISAM 和 InnoDB 的区别有哪些?

MyISAM 存储引擎:

  • 特点:不支持事务和外键;
  • 索引:MyISAM 是非聚簇索引,索引文件和数据文件是分离的,索引保存的是数据的地址;
  • 检索:MyISAM 支持全文索引,查询效率上 InnoDB 要高;
  • 锁:MyISAM 支持表级锁,每次操作对整个表加锁,一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限;
  • 存贮方式: 存贮表的总行数,执行 select count(*) from table 时只需要读出该变量即可,速度很快;
  • 应用场景:查询和插入操作为主,只有很少更新和删除操作,并对事务的完整性、并发性要求不高。 因为MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。

InnoDB 存储引擎:

  • 特点:支持事务和外键操作,支持并发控制;
  • 索引:InnoDB 是聚簇索引,索引和数据保存在同一个 B+ 树中,因此从聚簇索引中获取数据比非聚簇索引更快;
  • 检索:Innodb 不支持全文索引,执行 select count(*) from table 时需要全表扫描;
  • 锁:Innodb 支持行级锁和表级锁,默认为行级锁;
  • 存贮方式:不存贮表的总行数,MyISAM 用一个变量保存了整个表的行数,执行 select count(*) from table 时只需要读出该变量即可,速度很快;
  • 应用场景:MySQL 5.5版本后默认,对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作。