WithCoderWithCoderWithCoder

MySQL数据库常见的四种引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据.不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能.现在许多不同的数据库管理系统都支持多种不同的数据引擎.MySQL的核心就是存储引擎.

MySQL常用的存储引擎有MyISAM、InnoDB、MEMORY、ISAM,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表.

要查看MySQL支持的存储引擎,可以登录数据库后执行命令: show engines;从执行结果就可以看到支持的引擎,如下图

1-2002261034191L.png

在MySQL 5.5 版本之前,MySQL默认的存储引擎为MyISAM,不够我们可以根据自己需要更换存储引擎为InnoDB.可以参考本站文章,更改MySQL数据库的默认引擎为InnoDB.

下面简单介绍常用的几种存储引擎:

ISAM

 ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数.因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源.ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错.如果你的硬盘崩溃了,那么数据文件就无法恢复了.如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序.

MyISAM

 MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎.除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间.MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具.MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作.所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式.MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据.

 插入数据快,空间和内存使用比较低.如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率.如果应用的完整性、并发性要求比较低,也可以使用。

InnoDB

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,从5.5版本后,InnoDB是默认的MySQL引擎.

InnoDB主要特性有:

1.InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读.这些功能增加了多用户部署和性能.在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合.

2.InnoDB是为处理巨大数据量的最大性能设计.它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的.

3.InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池.InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件).这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中.InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上.

4.InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键.

5.InnoDB被用在众多需要高性能的大型数据库站点上

InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件.

MEMORY

 MEMORY是MySQL中一类特殊的存储引擎.它使用存储在内存中的内容来创建表,而且数据全部放在内存中.这些特性与前面的两个很不同.每个基于MEMORY存储引擎的表实际对应一个磁盘文件.该文件的文件名与表名相同,类型为frm类型.该文件中只存储表的结构.而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率.值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用.如果不需要了,可以释放内存,甚至删除不需要的表.MEMORY默认使用哈希索引.速度比使用B型树索引快.当然如果你想用B型树索引,可以在创建索引时指定.注意,MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据.如果重启或者关机,所有数据都会消失.因此,基于MEMORY的表的生命周期很短,一般是一次性的.

 所有的数据都在内存中,数据的处理速度快,但是安全性不高.如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY.它对表的大小有要求,不能建立太大的表.所以,这类数据库只使用在相对较小的数据库表.

注意:

 同一个数据库也可以使用多种存储引擎的表.如果一个表要求比较高的事务处理,可以选择InnoDB.这个数据库中可以将查询要求比较高的表选择MyISAM存储.如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎.

        使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能.

欢迎分享交流,转载请注明出处:WithCoder » MySQL数据库常见的四种引擎