第16章 可供选择的存储引擎

官方文档地址:Chapter 16 Alternative Storage Engines


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 Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 2. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 3. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: 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 engine
Transactions: NO
          XA: NO
  Savepoints: NO
...

本章涵盖了特殊用途的 MySQL 存储引擎的用例。不包括默认的InnoDB存储引擎和NDB存储引擎,这两个分别在 第15章 InnoDB 存储引擎第23章 MySQL NDB Cluster 8.0 介绍。对于高级用户,它还包含了可插拔存储引擎架构的描述(见 16.11 MySQL 存储引擎架构概述)。

可用的存储引擎可能取决于您使用的 MySQL 版本。

关于 MySQL 存储引擎的常见问题请参见 A.2 MySQL 8.0 FAQ: storage engines

MySQL 8.0 支持的存储引擎

  • InnoDB:MySQL 8.0 默认的存储引擎。InnoDB是一个事务安全(符合 ACID)的 MySQL 存储引擎,具有提交、回滚和崩溃恢复功能,以保护用户数据。InnoDB行级锁(没有升级为更粗粒度的锁)和 Oracle 风格的一致性非锁定读提高了多用户并发性和性能。InnoDB将用户数据存储在聚集索引中,以减少常见的基于主键的查询的 I/O。为了维护数据完整性,InnoDB还支持外键引用完整性约束。关于InnoDB的更多信息,请参见 第15章 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

注释:

  1. 在服务器中实现,而不是在存储引擎中。
  2. 只有使用压缩行格式时,才支持压缩的MyISAM表。使用MyISAM压缩行格式的表是只读的。
  3. 在服务器端通过加密功能实现。
  4. 在服务器端通过加密功能实现;在 MySQL 5.7 和更高版本中,支持数据静止加密。
  5. 在 MySQL NDB Cluster 7.3和更高版本中支持外键。
  6. 在 MySQL 5.6 和更高版本中支持全文索引。
  7. MySQL 5.7 和更高版本中提供了对地理空间索引的支持。
  8. InnoDB内部利用哈希索引来实现自适应哈希索引特性。
  9. 请参阅本节后面的讨论。

猜你喜欢

转载自blog.csdn.net/wb1046329430/article/details/114926285
今日推荐