mysql的引擎有哪几种,innodb Myisam 的区别?

2018-09-27  本文已影响0人  寧寧欧尼

数据库有以下集中引擎:ISAM、MYISAM、HEAP、CSV、BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、InnoDB、 Berkeley、Merge、Federated和Cluster/NDB等。

innodb和Myisam的区别?

主要区别

(1)存储结构

MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名支出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD(MYData)。索引文件的扩展名是.MYI(MYIndex)。
Innodb:所有表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),Innodb表的大小值受限于操作系统文件的大小,一般为2GB。

(2)存储空间

MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
Innodb:需要更多的内存和 存储,它会在主内存建立其专用的缓存池用于告诉缓冲数据和索引。

(3)可移植性、备份及恢复

MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
Innodb:免费的方案可以是拷贝数据文件、备份binlog,或者用mysqldump,在数据量达到几十G的时候就相对痛苦了。

(4)构造上的区别

MyISAM在磁盘上存储成三个文件,其中.frm文件存储表定义;.MYD (MYData)为数据文件;.MYI (MYIndex)为索引文件。
而innodb是由.frm文件、表空间(分为独立表空间或者共享表空间)和日志文件(redo log)组成。

(5)事务上的区别

myisam不支持事务;而innodb支持事务。

(6)锁上的区别

myisam使用的是表锁;而innodb使用的行锁(当然innodb也支持表锁)。
表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许,因此myisam支持的并发量低,但myisam不会出现死锁;
行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。因此行锁能大大的减少数据库操作的冲突,但有时会导致死锁。

(7)是否支持外键的区别

myisam不支持外键,innodb支持外键

(8)myisam只把索引都load到内存中,而innodb存储引擎是把数据和索引都load到内存中 ,innob不支持全文索引

当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。

上一篇 下一篇

猜你喜欢

热点阅读