前言

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

在MySQL中,支持多种存储引擎,本篇,我们就来聊一聊MySQL中的存储引擎。

本文使用的MySQL版本为5.6.26,操作系统环境为Linux CentOS。

MySQL存储引擎

在MySQL中,可以通过命令来查看当前MySQL版本支持的存储引擎:

show engines;

MySQL写 begin end 会自动执行吗 mysql end as_MySQL引擎对比


可以看到,在MySQL5.6版本中,共有9中存储引擎,其中支持8种,最后一种的 FEDERATED 是不支持的。

其中默认引擎为InnoDB。接下来我们对每种引擎进行简单介绍。

InnoDB(默认引擎):

在MySQL 5.6版本后,作为MySQL的默认存储引擎,支持ACID事物,保证数据提交、回滚、异常恢复,可以保护好用户的数据安全。

InnoDB支持行级锁,以及Oracle风格的无锁读取数据,可以更好的支持多用户并发访问数据。

InnoDB将用户数据存储在集群索引中,这样可以减少通过主键进行查询时的I/O。

InnoDB为了保证数据的完整性,同时也支持表外键关联。

MyISAM:

在该引擎下,数据表的存储可以占用较少的空间。

MyISAM支持表级锁,因此其常常应用在Web场景下的只读或只写的情况,或者作为数据仓库使用。

Memory:

Memory引擎会将全部数据存储在内存中,因此可以带来极高的访问速度,对于非核心数据访问,可以考虑采用此引擎。

Memory引擎以前又被叫做“堆引擎”,它的使用场景较少。

InnoDB采用缓冲区内存区,可以将大多数或全部的数据以更加可靠的方式存储在内存中;
NDBCLUSTER也提供快速key-value键值对的方式,在大规模分布式数据集中进行查找数据。

一句话总结,有点鸡肋的引擎。

CSV:

该引擎的数据表会以CSV的格式进行存储。

其支持导入CSV格式的dump数据,数据表不支持索引,不太常用,只用来进行数据的导入导出操作时,可以考虑采用。

Archive:

归档引擎,该索引数据表存储较为紧凑,不支持索引,可以用来存储和检索较大规模的很少访问的历史记录,归档数据,或安全审计的信息。

Blackhole:

从该引擎的名字就可以看出来它的特性,黑洞,该引擎只进行接收数据但不会进行存储,很像Unix系统中的/dev/null功能。查询通常会返回一个空的结果集。

其数据表可以应用在集群环境下的发布通知的场景,主库的DML语句会被分发到各个从库上去,但是主库不会保存这些数据。

NDB(NDBCLUSTER):

该分布式数据引擎较为适合使用在应用要求极高可用性的场景下。

各引擎特性对比

特性

MyISAM

Memory

InnoDB

Archive

NDB

B-tree索引

YES

YES

YES

NO

NO

备份与指定时间点恢复

YES

YES

YES

YES

YES

数据库集群

NO

NO

NO

NO

YES

聚合索引

NO

NO

YES

NO

YES

数据压缩

YES

NO

YES

NO

YES

数据缓存

NO

N/A

YES

NO

YES

数据加密

YES

YES

YES

YES

YES

表外键

NO

NO

YES

NO

YES

全文搜索索引

YES

NO

YES

NO

NO

地理空间数据

YES

NO

YES

YES

YES

地理空间索引

YES

NO

YES

NO

NO

Hash索引

NO

YES

NO

NO

NO

索引缓存

YES

N/A

YES

NO

YES

锁粒度

表级别

表级别

行级锁

行级锁

行级锁

数据复制

YES

Limit

YES

YES

YES

最大存储限制

256TB

RAM

64TB

NO

384EB

事物

NO

NO

YES

NO

YES

结语

本篇,我们对MySQL中主要的引擎进行了大体的介绍,对其特性进行了对比,虽然MySQL提供了如此多的数据引擎,但是在实际生产场景下,我们最常用的还是InnoDB引擎,当然,如果对于特殊的数据存储场景,也可根据实际情况进行数据引擎的选择。

下一篇,我们将着重介绍一下InnoDB引擎,对其各种特性进行详细分析,敬请期待!

 

让我们一起共同学习成长!