MySQL 表引擎的区别和选择

MySQL 的表引擎分为InnoDB和MyIsam

InnoDB

  1. 支持事务和外键
  2. 采用聚簇索引
  3. 数据读取时采用行级锁,粒度更小,并发更强
  4. 读写之间可并发操作,读取时不需要加锁,根据隔离级别的不同,读取时遇到锁会读取快照
  5. 运行时会为数据建立哈希索引,但只存在于内存中,停库则丢失,重启后需要重新建立
  6. 行级锁定 [row-level]

MyIsam

  1. 对数据和索引进行分开存储
  2. 索引缓存在内存中,存储的是数据的磁盘地址
  3. 数据读取时采用表级锁,无法实现读写并发,只支持读读并发
  4. 数据写入优先级高于读取优先级,因此大量的写入操作会导致表的死锁
  5. 支持 B-Tree 、R-Tree 、Full-text 索引
  6. 表级锁定 [table-level]

总结

  1. 通常情况下使用InnoDB做为表引擎,因为其支持事务和外键,以及读写并发
  2. 对于读取量很大,基本没有写入操作的表,使用MyIsam做为表引擎,可加快表的读取速度