美文网首页MySQL
MySQL存储引擎之概览

MySQL存储引擎之概览

作者: Jerry_1116 | 来源:发表于2020-04-24 15:06 被阅读0次

    1 MySQL存储引擎简介

    存储引擎是MySQL用于处理不同表类型的SQL操作的组件。 InnoDB是默认的也是最通用的存储引擎,Oracle建议将其用于表(特殊用例除外)。默认情况下,MySQL 8.0中的CREATE TABLE语句创建InnoDB表。
    MySQL Server使用可插拔的存储引擎体系结构,该体系结构使存储引擎可以加载到正在运行的MySQL服务器中或从中卸载。

    要确定服务器支持哪些存储引擎,请使用SHOW ENGINES语句。 “Support”列中的值指示一个引擎是否可用,值可以为:(1)YES:可用;(2)NO:不可用;(3)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
    

    2 MySQL 8.0支持的存储引擎

    存储引擎 特征
    InnoDB MySQL 8.0中的默认存储引擎。 InnoDB是MySQL的事务安全(兼容ACID)存储引擎,具有提交,回滚和崩溃恢复功能来保护用户数据。 InnoDB行级锁(无需升级为更粗粒度的锁定)和Oracle风格的一致非锁定读取可提高多用户并发性和性能。 InnoDB将用户数据存储在聚集索引中,以减少基于主键的常见查询的I / O。为了维护数据完整性,InnoDB还支持FOREIGN KEY引用完整性约束。有关InnoDB的更多信息,请参见The InnoDB Storage Engine
    MyISAM 这些表占用的空间很小。表级锁限制了读/写工作负载中的性能,因此它通常用于Web和数据仓库配置中的只读或绝大部分读工作负载中。
    Memory(内存) 将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中快速访问。该引擎以前称为HEAP引擎。Memory的用例正在减少;具有缓冲池内存区域的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源代码中的一个示例,说明了如何开始编写新的存储引擎。它主要是开发人员感兴趣的。存储引擎是什么都不做的“stub”。您可以使用此引擎创建表,但是不能将数据存储在表中或从表中检索数据。

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

    3 如何选择一个存储引擎

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

    特征 MyISAM Memory InnoDB Archive NDB
    B-tree索引 Yes Yes Yes No No
    备份/时间点恢复 (note 1) Yes Yes Yes Yes Yes
    集群数据库支持 No No No No Yes
    聚集索引 No No Yes No No
    压缩数据 Yes (note 2) No Yes Yes No
    数据缓存 No N/A Yes No Yes
    数据加密 Yes (note 3) Yes (note 3) Yes (note 4) Yes (note 3) Yes (note 3)
    Foreign key支持 No No Yes No Yes (note 5)
    全文搜索索引 Yes No Yes (note 6) No No
    地理空间数据类型支持 Yes No Yes Yes Yes
    地理空间索引支持 Yes No Yes (note 7) No No
    Hash索引 No Yes No (note 8) No Yes
    索引缓存 Yes N/A Yes No Yes
    锁粒度 Table Table Row Row Row
    MVCC No No Yes No No
    复制支持(note 1) Yes Limited (note 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和更高版本中,支持静态数据表空间加密。

    1. MySQL Cluster NDB 7.3和更高版本提供了对外键的支持。
    2. MySQL 5.6和更高版本提供了对FULLTEXT索引的InnoDB支持。
    3. MySQL 5.7和更高版本提供了InnoDB对地理空间索引的支持。
    4. InnoDB在内部将哈希索引用于其自适应哈希索引功能。
      9.详细请参阅官方文档。

    参考

    相关文章

      网友评论

        本文标题:MySQL存储引擎之概览

        本文链接:https://www.haomeiwen.com/subject/prbxwhtx.html