数据库有以下集中引擎:ISAM、MYISAM、HEAP、CSV、BLACKHOLE、ARCHIVE、PERFORMANCE_SCHEMA、InnoDB、 Berkeley、Merge、Federated和Cluster/NDB等。
innodb和Myisam的区别?
- MyIsam是MySQL的默认数据库引擎,有早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但是有一个缺点:不支持事务处理。不过,在这几年的发展下,MySQL也导入了Innodb,以强化参考完整性与并发违规处理机制,后来就主键取代MyISAM。
- innodb,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。Innodb由Innobase Oy公司所开发,2006年五月由甲骨文公司并购。与传统的ISAM与MyISAM相比,Innodb的最大特色是支持了ACID兼容的事务功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。
主要区别
- 两种类型最主要的差别就是Innodb支持事务处理与外键和行级锁。而MyISAM不支持,所以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引擎会提升效率。
网友评论