MySQL引擎:MyIsam和Innodb的区别

InnoDB:

定义:

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:

定义:

MyISAM 是 MySQL 5.5.5 之前的默认引擎,它的设计目标是快速读取。但是它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。

优点:

1.高性能读取;

2.因为它保存了表的行数,当使用COUNT统计时不会扫描全表;

缺点:

1、锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。

2、此引擎不支持事务,也不支持外键。

3、INSERT和UPDATE操作需要锁定整个表;

4、不能在表损坏后恢复数据。(是不能主动恢复)

以下两点必须使用 InnoDB:

(1)可靠性要求比较高,或者要求事务;

(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。

对比之下,MyISAM的使用场景:

1)做很多count的计算的。如一些日志,调查的业务表。

2)插入修改不频繁,查询非常频繁的。

3)没有事务。

猜你喜欢

转载自blog.csdn.net/ctrigger/article/details/89392828