mysql常见的存储引擎以及特点

什么是存储引擎
不同的技术以及配套的相关功能在 MySQL中被称作存储引擎。存储机制、索引技巧、锁定水平等等。

常见的存储引擎
MySQL提供的各种存储引擎的设计都考虑到了不同的用例。下表概述了MySQL提供的一些存储引擎,并在下表中给出了澄清说明。

mysql常见的存储引擎以及特点
InnoDB:
MySQL 5.5.5的默认存储引擎。InnoDB是一个事务安全(ACID兼容)的MySQL存储引擎,它具有提交、回滚和崩溃恢复功能来保护用户数据。InnoDB行级锁定(不升级到更粗粒度的锁)和Oracle风格的一致非锁定读取提高了多用户并发性和性能。InnoDB将用户数据存储在聚集索引中,以减少基于主键的常见查询的I/O。为了维护数据的完整性,InnoDB还支持外键引用完整性约束。

MyISAM:
MySQL存储引擎,在Web、数据仓库和其他应用程序环境中使用最多。MyISAM在所有MySQL配置中都受支持,是MySQL 5.5.5之前的默认存储引擎。

该存储引擎并发性差,不支持事务,所以使用场景比较少,主要特点为:
(1)不支持事务;
(2)不支持外键,如果强行增加外键,不会提示错误,只是外键不其作用;
(3)对数据的查询缓存只会缓存索引,不会像InnoDB一样缓存数据,而且是利用操作系统本身的缓存;
(4)默认的锁粒度为表级锁,所以并发度很差,加锁快,锁冲突较少,所以不太容易发生死锁;
(5)支持全文索引(MySQL5.6之后,InnoDB存储引擎也对全文索引做了支持),但是MySQL的全文索引基本不会使用,对于全文索引,现在有其他成熟的解决方案,比如:ElasticSearch,Solr,Sphinx等。
(6)数据库所在主机如果宕机,MyISAM的数据文件容易损坏,而且难恢复;

Memory存储引擎:
将所有数据存储在RAM中,以便在需要快速查找引用和其他类似数据的环境中快速访问。这个引擎以前被称为堆引擎。
将数据存在内存中,和市场上的Redis,memcached等思想类似,为了提高数据的访问速度。

ARCHIVE存储引擎
ARCHIVE存储引擎适合的场景有限,由于其支持压缩,故主要是用来做日志,流水等数据的归档

NDB
(也称为NDBCLUSTER)-此集群数据库引擎特别适合于需要最高正常运行时间和可用性的应用程序。

其他类型的还有

CSV:
CSV存储引擎使用逗号分隔值格式将数据存储在文本文件中。您可以使用CSV引擎轻松地在其他软件和应用程序之间交换数据,这些软件和应用程序可以以CSV格式导入和导出。

黑洞:
黑洞存储引擎接受但不存储数据,检索总是返回一个空集。该功能可用于分布式数据库设计,其中数据自动复制,但不存储在本地。