• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 位置: MySQL 8 中文手册

    MySQL 支持的存储引擎

    存储引擎是MySQL组件,用于处理不同表类型的SQL操作。InnoDB是默认的且用途最广泛的存储引擎,Oracle建议将其用于表(特殊用例除外)。(默认情况下CREATE TABLE,MySQL 8.0中的语句创建InnoDB表。)

    MySQL Server使用可插拔的存储引擎体系结构,使存储引擎可以加载到正在运行的MySQL服务器或从正在运行的MySQL服务器上卸载。

    要确定服务器支持哪些存储引擎,请使用以下SHOW ENGINES语句。Support列中的值指示是否可以使用引擎。的值YESNODEFAULT表示发动机可用,不可用,或可用与当前被设置为默认的存储引擎。

    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被覆盖在存储引擎InnoDB存储引擎MySQL的NDB簇8.0。对于高级用户,它还包含对可插拔存储引擎体系结构的描述(请参见“ MySQL存储引擎体系结构概述”)。

    有关商业MySQL Server二进制文件中提供的功能的信息,请参见 MySQL网站上的MySQL Editions。可用的存储引擎可能取决于您使用的MySQL版本。

    有关MySQL存储引擎的常见问题的答案,请参见第A.2节“ MySQL 8.0 FAQ:存储引擎”。

    MySQL 8.0支持的存储引擎

    • InnoDB:MySQL 8.0中的默认存储引擎。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语句发送到从属服务器的复制配置中,但是主服务器不会保留其自己的数据副本。
    • NDB(也称为NDBCLUSTER):此集群数据库引擎特别适合于需要尽可能高的正常运行时间和可用性的应用程序。
    • Merge:使MySQL DBA或开发人员可以在逻辑上对一系列相同的MyISAM表进行分组并将它们作为一个对象引用。适用于VLDB环境,例如数据仓库。
    • Federated:提供了链接单独的MySQL服务器以从许多物理服务器创建一个逻辑数据库的能力。非常适合于分布式或数据集市环境。
    • Example:此引擎作为MySQL源代码中的示例,说明了如何开始编写新的存储引擎。它主要是开发人员感兴趣的。存储引擎是什么都不做的“存根”。您可以使用此引擎创建表,但是不能将数据存储在表中或从表中检索数据。

    您不限于对整个服务器或架构使用相同的存储引擎。您可以为任何表指定存储引擎。例如,一个应用程序可能主要使用InnoDB表,一个CSV表用于将数据导出到电子表格,而几个MEMORY表用于临时工作区。

    选择存储引擎

    MySQL随附的各种存储引擎在设计时都考虑了不同的用例。下表概述了MySQL随附的一些存储引擎,并在表后提供了一些说明。

    存储引擎功能摘要

    特征我的ISAM记忆创新数据库封存国家开发银行
    B树索引没有没有
    备份/时间点恢复(注释1)
    集群数据库支持没有没有没有没有
    聚集索引没有没有没有没有
    压缩数据是(注释2)没有没有
    资料快取没有不适用没有
    加密数据是(注释3)是(注释3)是(注释4)是(注释3)是(注释3)
    外键支持没有没有没有是(注释5)
    全文搜索索引没有是(注释6)没有没有
    地理空间数据类型支持没有
    地理空间索引支持没有是(注释7)没有没有
    哈希索引没有否(注释8)没有
    索引缓存不适用没有
    锁定粒度
    MVCC没有没有没有没有
    复制支持(注释1)限量(附注9)
    储存限制256TB内存64TB没有384EB
    T树索引没有没有没有没有
    交易次数没有没有没有
    更新数据字典的统计信息

    笔记:

    1.在服务器而不是在存储引擎中实现。

    2.仅当使用压缩的行格式时,才支持压缩的MyISAM表。在MyISAM中使用压缩行格式的表是只读的。

    3.通过加密功能在服务器中实现。

    4.通过加密功能在服务器上实现;在MySQL 5.7和更高版本中,支持静态数据表空间加密。

    5. MySQL Cluster NDB 7.3和更高版本提供了对外键的支持。

    6. MySQL 5.6和更高版本提供了对FULLTEXT索引的InnoDB支持。

    7. MySQL 5.7和更高版本提供了InnoDB对地理空间索引的支持。

    8. InnoDB在内部将哈希索引用于其自适应哈希索引功能。

    9.请参阅本节后面的讨论。