mysql常用的引擎共有三种:分别是InnoDB、MyISam、MEMORY。
可以使用下面的命令来查看数据库支持的存储引擎(5.7版本)
SHOW ENGINES
下面就讲讲这四种引擎的区别以及应用场景
InnoDB
InnoDB是一个健壮的事务型存储引擎,是5.5以后默认存储引擎,也是最常用的存储引擎之一。它提供了事务安全(ACID兼容)表,支持外键引用完整性约束,支持提交、回滚和紧急恢复功能来保护数据,同时还支持行级锁定。
适用如下场景:
更新密集的表:适合处理多重并发的更新请求
事务:支持事务
自动灾难恢复:与其它存储引擎不同,InnoDB表能够自动从灾难中恢复
外键约束:Mysql中支持外键的存储引擎只有InnoDB
自动递增:支持自动增加列AUTO_INCREMENT属性
MyISAM
MyISAM表是独立于操作系统的,所以移植方便,优势是访问速度快但是缺陷就是无法处理事务。支持3种不同的存储格式,分别是静态(固定长度)表、动态表、压缩表,其中,静态表是默认的存储格式。
静态表:字段是非变长字段,记录是固定长度的(长度不足补空格),优点是存储非常迅速,容易缓存,出现故障容易修复;缺点是占用的空间通常比动态多(补空格)。
说明:MyISAM引擎在读取数据的时默认会把字段后面的空格去掉,如果不注意会把数据本身带的空格也会忽略。
动态表:字段是变长字段,记录不是固定长度的,优点是占用的空间相对较少,缺点是频繁的更新和删除记录会导致碎片产生,所以要定时进行碎片整理:定期执行OPTIMIZE TABLE语句或myisamchk -r命令来改善性能,所以出现故障时恢复相对困难。
压缩表:由myisam工具创建,占据非常小的磁盘空间。因为每个记录是被单独压缩的,所有只有非常小的访问开支。
MyISAM存储引擎适用场景:
选择密集型的表:MyISAM存储引擎在筛选大量数据时非常迅速(提供高速存储和检索以及全文搜索能力)
插入密集型的表:MyISAM的并发插入特性允许同时选择和插入数据,所以MyISAM存储引擎很适合管理邮件或Web服务器日志数据等
MEMORY
MEMORY是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。这些特性与前面的两个很不同。
每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。值得注意的是,服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。
MEMORY默认使用哈希索引。速度比使用B型树索引快。当然如果你想用B型树索引,可以在创建索引时指定。
注意,MEMORY用到的很少,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。
适用场景:
所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。