vlambda博客
学习文章列表

Mysql系列:存储引擎

Mysql中支持多种存储引擎,常用的有MyISAM、InnoDB、Memory、Merge等。他们的区别大致如下:

MyISAM

MyISAM是Mysql默认的存储引擎,不支持事务和外键,优势是访问速度快。

支持三种存储格式:静态表、动态表和压缩表。静态表中字段都是固定长度,存储迅速容易缓存;缺点是需要通过空格补位,占用空间多。动态表字段长度不固定,容易产生碎片;压缩表压缩存储,占用磁盘空间更小。

MyISAM适合那些读操作和插入操作为主,更新和删除较少 且 对事务和并发要求不高的场景,比如数仓等。

InnoDB

具有提交、回滚、崩溃恢复的事务机制,相比于MyISAM处理效率低一些,占用更多的磁盘空间来保存数据和索引。

支持外键存储,但是外键在父表中必须有对应的索引。

InnoDB适合那些对事务的完整性和并发场景下的一致性有要求的场景,可以有效的降低删除和更新导致的锁,还能确保事务的完整提交和回滚,适合如计费或财务系统,对数据准确性有比较高要求的系统。

MEMORY

基于内存创建表,访问速度快,默认使用Hash索引。启动的时候可以通过--init-file初始化表,如INSERT INTO ... SELECTLOAD DATA INFILE

用于存储内容变化不频繁的代码表或者作为中间结果表,提供快速访问。缺点是表的大小有限制。

MERGE

是一组MyISAM表的组合,MERGE表本身没有数据,并作为一个表使用它们,对表的增删改查实际都会变成对底层表的操作。可以有效的避免单个表的大小限制,还可以将表分布在多个磁盘上,适合做数仓等。

参考