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