
第16章 可供选择的存储引擎
发布日期:2021-05-08 00:28:19
浏览次数:28
分类:精选文章
本文共 3947 字,大约阅读时间需要 13 分钟。
官方文档地址:
16.1 Setting the Storage Engine
16.2 The MyISAM Storage Engine 16.3 The MEMORY Storage Engine 16.4 The CSV Storage Engine 16.5 The ARCHIVE Storage Engine 16.6 The BLACKHOLE Storage Engine 16.7 The MERGE Storage Engine 16.8 The FEDERATED Storage Engine 16.9 The EXAMPLE Storage Engine 16.10 Other Storage Engines 16.11 Overview of MySQL Storage Engine Architecture存储引擎是 MySQL 组件,用于处理不同表类型的 SQL 操作。InnoDB
是默认的、最通用的存储引擎,Oracle 建议除了特殊的用例外,其他表都使用InnoDB
。(MySQL 8.0 中的CREATE TABLE
语句默认创建的就是InnoDB
表。)
MySQL 服务器使用可插拔存储引擎的架构,使存储引擎可以在 MySQL 服务器运行中的实现加载或卸载。
要确定您的服务器支持哪些存储引擎,请使用SHOW ENGINES
语句。Support
列中的值表示引擎是否可以使用。YES
表示该引擎可用,NO
表示该引擎不可用,DEFAULT
表示该引擎可用,并且是默认存储引擎。
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
本章涵盖了特殊用途的 MySQL 存储引擎的用例。不包括默认的InnoDB
存储引擎和NDB
存储引擎,这两个分别在 和 介绍。对于高级用户,它还包含了可插拔存储引擎架构的描述(见 )。
可用的存储引擎可能取决于您使用的 MySQL 版本。
关于 MySQL 存储引擎的常见问题请参见 。
MySQL 8.0 支持的存储引擎
- InnoDB:MySQL 8.0 默认的存储引擎。
InnoDB
是一个事务安全(符合 ACID)的 MySQL 存储引擎,具有提交、回滚和崩溃恢复功能,以保护用户数据。InnoDB
行级锁(没有升级为更粗粒度的锁)和 Oracle 风格的一致性非锁定读提高了多用户并发性和性能。InnoDB
将用户数据存储在聚集索引中,以减少常见的基于主键的查询的 I/O。为了维护数据完整性,InnoDB
还支持外键引用完整性约束。关于InnoDB
的更多信息,请参见 。 - MyISAM:这些表占用空间小。表级锁定限制了读/写工作负载中的性能,因此通常用于 Web 和数据仓库配置中的只读或以读为主的工作负载。
- Memory:将所有数据存储在 RAM 中,以便在需要快速查找非关键数据的环境中快速访问。这个引擎以前被称为
HEAP
引擎。现在用的越来越少了,因为:InnoDB
通过其缓冲池内存区域提供了一种通用且持久的方式来将大部分或全部数据保存在内存中,而NDBCLUSTER
则为大型分布式数据集提供了快速的键值查找。 - CSV:它的表实际上是带有逗号分隔符的文本文件。
CSV
表允许您以CSV
格式导入或转储数据,以便与读写相同格式的脚本和应用程序交换数据。由于CSV
表没有被索引,通常在正常操作时将数据保存在InnoDB
表中,只在导入或导出阶段使用CSV
表。 - Archive:这些紧凑的、没有索引的表用于存储和检索大量很少引用的历史、归档或安全审计信息。
- Blackhole:黑洞存储引擎接受但不存储数据,类似于 Unix
/dev/null
设备。查询总是返回一个空集。这些表可用于复制配置,其中DML
语句被发送到复制服务器,但源服务器不保留自己的数据副本。 - NDB(也叫 NDBCLUSTER):这种集群数据库引擎特别适合要求尽可能高的正常运行时间和可用性的应用程序。
- Merge:允许 MySQL DBA 或开发人员在逻辑上对一系列相同的
MyISAM
表进行分组,并将它们作为一个对象引用。适合于 VLDB 环境,比如数据仓库。 - Federated:提供链接独立的 MySQL 服务器的能力,从许多物理服务器创建一个逻辑数据库。非常适合分布式或数据集市环境。
- Example:这个引擎在 MySQL 源代码中充当示例,演示如何开始编写新的存储引擎。主要是开发人员对它感兴趣。这个存储引擎是一个什么都不做的“存根”。您可以使用这个引擎创建表,但是不能在表中存储数据,也不能从表中检索数据。
您不必局限于对整个服务器或架构使用相同的存储引擎。您可以为任何表指定存储引擎。例如,应用程序可能主要使用InnoDB
表,其中一个CSV
表用于将数据导出到电子表格,一些MEMORY
表用于临时工作区。
选择存储引擎
MySQL 提供的各种存储引擎是根据不同的用例设计的。下表概述了 MySQL 提供的一些存储引擎,明确了一些注意事项。存储引擎特性概述
特点 | MyISAM | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|
B-tree 索引 | Yes | Yes | Yes | No | No |
备份/时间点恢复 (注1) | Yes | Yes | Yes | Yes | Yes |
集群数据库支持 | No | No | No | No | Yes |
聚集索引 | No | No | Yes | No | No |
数据压缩 | Yes (注2) | No | Yes | Yes | No |
数据缓存 | No | N/A | Yes | No | Yes |
数据加密 | Yes (注3) | Yes (注3) | Yes (注4) | Yes (注3) | Yes (注3) |
外键支持 | No | No | Yes | No | Yes (注5) |
全文搜索索引 | Yes | No | Yes (注6) | No | No |
地理空间数据类型支持 | Yes | No | Yes | Yes | Yes |
地理空间索引支持 | Yes | No | Yes (注7) | No | No |
Hash 索引 | No | Yes | No (注8) | No | Yes |
索引缓存 | Yes | N/A | Yes | No | Yes |
锁粒度 | Table | Table | Row | Row | Row |
MVCC | No | No | Yes | No | No |
复制支持(注1) | Yes | Limited (注9) | Yes | Yes | Yes |
存储限制 | 256TB | RAM | 64TB | None | 384EB |
T-tree 索引 | No | No | No | No | Yes |
交易 | No | No | Yes | No | Yes |
更新数据字典的统计信息 | Yes | Yes | Yes | Yes | Yes |
注释:
- 在服务器中实现,而不是在存储引擎中。
- 只有使用压缩行格式时,才支持压缩的
MyISAM
表。使用MyISAM
压缩行格式的表是只读的。 - 在服务器端通过加密功能实现。
- 在服务器端通过加密功能实现;在 MySQL 5.7 和更高版本中,支持数据静止加密。
- 在 MySQL NDB Cluster 7.3 和更高版本中支持外键。
- 在 MySQL 5.6 和更高版本中支持全文索引。
- MySQL 5.7 和更高版本中提供了对地理空间索引的支持。
InnoDB
内部利用哈希索引来实现自适应哈希索引特性。- 请参阅本节后面的讨论。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月23日 15时24分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
不可思议的纯 CSS 滚动进度条效果
2021-05-09
【CSS进阶】伪元素的妙用--单标签之美
2021-05-09
惊闻NBC在奥运后放弃使用Silverlight
2021-05-09
IE下尚未实现错误的原因
2021-05-09
创建自己的Docker基础镜像
2021-05-09
Python 简明教程 --- 20,Python 类中的属性与方法
2021-05-09
KNN 算法-理论篇-如何给电影进行分类
2021-05-09
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
2021-05-09
CODING 敏捷实战系列课第三讲:可视化业务分析
2021-05-09
工作动态尽在掌握 - 使用 CODING 度量团队效能
2021-05-09
CODING DevOps 深度解析系列第二课报名倒计时!
2021-05-09
数据结构第八节(图(下))
2021-05-09
基于Mustache实现sql拼接
2021-05-09
POJ 2260 Error Correction 模拟 贪心 简单题
2021-05-09
gRPC在 ASP.NET Core 中应用学习(一)
2021-05-09
@SuppressWarnings 用法
2021-05-09
看完你就明白的锁系列之锁的状态
2021-05-09
看完这篇操作系统,和面试官扯皮就没问题了
2021-05-09
我的价值观
2021-05-09
一文详解 Java 并发模型
2021-05-09