0%

MySQL 存储引擎

学习了解 MySQL 常见的存储引擎。

本内容主要摘自官方文档:

简介

在这篇文章中,将要讨论 Mysql 的存储引擎。存储引擎是 MySQL 的组件,用于处理不同类型的 SQL 操作。

MySQL 的存储引擎分为两类:

  • 事务性(transactional)
  • 非事务性(non-transactional)

MySQL 从 5.5 到最新的版本中,默认使用的存储引擎是 InnoDB ,在 5.5 版本之前默认使用的是 MyISAM 。选择合适的存储引擎是非常重要的。在 此篇文章中,将大概的描述 MySQL 常见的存储引擎。

查看 MySQL 支持的存储引擎:

1
SHOW ENGINS\G;

MySQL 支持的存储引擎

  • InnoDB
    InnoDB 是用于 MySQL 的事务安全(符合 ACID)的存储引擎,具有提交,回滚和崩溃恢复功能以保护用户数据。 InnoDB 行级锁和 Oracle 风格的一致 非锁定读取可提高多用户并发性和性能。InnoDB 将用户数据存储在聚集索引中,以减少基于主键的常见查询的 I / O。 为了保持数据完整性, InnoDB 还支持 FOREIGN KEY 引用完整性约束。有关更多信息 InnoDB,请参见【InnoDB 存储引擎】
  • MyISAM
    这些表占用的空间很小。 表级锁定 限制了读/写工作负载中的性能,因此表锁通常用于 Web 和数据仓库配置中的只读或主要工作负载中。
  • Memory
    将所有数据存储在 RAM 中,以便在需要快速查找非关键数据的环境中进行快速访问。该存储引擎以前称为 HEAP 存储引擎。它的用例正在减少;InnoDB 借助 其缓冲池内存区域,提供了一种通用且持久的方式来将大多数或所有数据保留在内存中,NDBCLUSTER 为大型分布式数据集提供了快速的键值查找。
  • CSV
    其表实际上是带有逗号分隔值的文本文件。CSV 表允许您以 CSV 格式导入或转储数据,便于读取和写入相同格式的脚本和应用程序交换数据。 由于 CSV 表未建立索引,因此通常在正常操作期间将数据保留在 InnoDB 表中,仅在导入或导出阶段使用 CSV 表。
  • Archive
    紧凑的、没有索引的表旨在用于存储和检索大量很少使用的历史,存档或安全审核信息。
  • Blackhole
    Blackhole 存储引擎可以接收数据但不存储,类似于 Unix /dev/null 设备。查询总是返回一个空集。这些表可用于将 DML 语句发送到副本的复制配置 中,但源服务器不保留自己的数据副本。
  • Merge
    使 MySQL DBA 或开发人员可以在逻辑上对一系列相同的 MyISAM 表进行分组并将它们作为一个对象引用。适用于 VLDB 环境,例如数据仓库。
  • Federated
    提供了链接单独的 MySQL 服务器以从许多物理服务器创建一个逻辑数据库的能力。非常适合于分布式或数据集市环境。
  • Example
    此引擎作为 MySQL 源代码中的示例,说明了如何开始编写新的存储引擎。它主要是开发人员感兴趣的。存储引擎是什么都不做的 “存根”。您可以使用此引擎 创建表,但是不能将数据存储在表中或从表中检索数据。

存储引擎的特性

特性 InnoDB MyISAM Memory Archive
B 树索引 Y Y Y
集群索引 Y
数据压缩 Y Y Y
数据缓存 Y
数据加密 N N Y N
外键支持 Y
全局搜索索引 Y Y
地理空间数据类型支持 Y Y
地理空间索引支持 Y Y
哈希索引 Y
索引缓存 Y Y
锁定粒度 表级别 表级别 行级别 行级别
MVCC Y
存储支持 64TB 256TB 内存 没有
事务安全 Y

Y 代表支持