MySQL数据库引擎

  • 概述
  • MyISAM
  • InnoDB
  • InnoDB和MyISAM的对比总结


概述

在MySQL5.5以前使用的是MyISAM数据库引擎,在5.6开始引入了InnoDB数据库引擎,大多数情况下使用的是InnoDB,在某些情况下使用MyISAM会更好,MyISAM更适合读密集的表,而InnoDB更适合写密集的的表

MyISAM

  • MyISAM只支持表锁,不支持行锁。 在操作MyISAM表时,会对操作的整张表加锁,读锁和写锁是互斥的,读锁是共享锁,写锁是排他锁。表锁的锁细粒度大,发生锁冲突的概率高,并发度最低。
  • 不支持事务。 强调的是性能,每次查询具有原子性,执行速度比InnoDB快,但是不提供事务支持。
  • 不支持外键,支持全文索引
  • 不支持崩溃恢复 (崩溃恢复指的是,数据库宕机后,原先操作一半的情况需要进行恢复,重新写入磁盘)
  • 保存了表的总行数,使用count函数会直接取出该值,但是使用where后则还是需要遍历 获取。

InnoDB

  • 支持行锁 使用了MVCC技术来实现高并发。
  • 支持事务 InnoDB和MyISAM相比最大的特色就是支持了ACID事务。
  • 支持外键,不支持全文索引 全文索引可以使用第三方的插件
  • 支持崩溃后的安全 恢复

InnoDB和MyISAM的对比总结

简单的说就是


总结:

  1. MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。例如在数据库的主从分离中,可以选择从服务器使用MyISAM做为引擎。
  2. 如果需要事务的支持,保证数据的正确性,那么应该选择InnoDB
  3. 如果并发写操作较多时应该选择InnoDB,因为MyISAM的锁细粒度大,高并发写的场景下会造成较长的等待时间。
  4. MyISAM支持压缩,可以降低磁盘占用,如果在不需要事务支持,并且没有太多写操作的情况下,可以考虑MyISAM