定义:
InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。Innodb引擎提供了对数据库
ACID事务的支持,并且实现了SQL标准的四种隔离级别,该引擎还提供了行级锁和外键约束,
它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,
MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎不支持FULLTEXT
类型的索引,而且它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。
当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在
并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL
语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。
优点:
1、支持事务处理、ACID事务特性;
2、实现了SQL标准的四种隔离级别;
3、支持行级锁和外键约束;
4、可以利用事务日志进行数据恢复。
5、锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大。
6、索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。
缺点:
因为它没有保存表的行数,当使用COUNT统计时会扫描全表。
适用场景:
1)经常更新的表,适合处理多重并发的更新请求。
2)支持事务。
3)可以从灾难中恢复(通过bin-log日志等)。
4)外键约束。只有他支持外键。
5)支持自动增加列属性auto_increment。
定义:
MyISAM 是 MySQL 5.5.5 之前的默认引擎,它的设计目标是快速读取。但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。
优点:
1.高性能读取;
2.因为它保存了表的行数,当使用COUNT统计时不会扫描全表;
缺点:
1、锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。
2、此引擎不支持事务,也不支持外键。
3、INSERT和UPDATE操作需要锁定整个表;
4、不能在表损坏后恢复数据。(是不能主动恢复)
以下两点必须使用 InnoDB:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。
对比之下,MyISAM的使用场景:
1)做很多count的计算的。如一些日志,调查的业务表。
2)插入修改不频繁,查询非常频繁的。
3)没有事务。
属性 | MyISAM | InnoDB |
---|---|---|
事务 | 不支持 | 支持 |
锁粒度 | 表锁 | 行锁 |
存储 | 拆分文件 | 表空间 |
隔离等级 | 无 | 所有 |
可移植格式 | 是 | 是 |
引用完整性 | 否 | 是 |
数据主键 | 否 | 是 |
MySQL缓存数据记录 | 无 | 有 |
可用性 | 全版本 | 全版本 |