MySQL -- 11 -- MySQL存储引擎MyISAM和InnoDB之间的区别(8.0)

在 MySQL5.5 版本之前,MyISAM 是 MySQL 的默认存储引擎;从 MySQL5.5 版本开始,InnoDB 是 MySQL 的默认存储引擎

官方文档:Introduction to InnoDB

官方文档:The MyISAM Storage Engine


一、MyISAM 存储引擎特性

MySQL -- 11 -- MySQL存储引擎MyISAM和InnoDB之间的区别(8.0)_第1张图片

  • 如上所示,共有以下特性

    • 支持 B 树索引

    • 支持备份或时间点恢复

      • 需要在服务器中实现,而不是在存储引擎中实现
    • 不支持集群数据库

    • 不支持聚集索引

    • 支持压缩数据

      • 仅当使用压缩行格式时才支持 MyISAM 压缩数据

      • 同时使用压缩行格式与 MyISAM 存储引擎的表是只读的

    • 不支持数据缓存

    • 支持数据加密

      • 需要在服务器中,通过加密功能来实现
    • 不支持外键

    • 支持全文索引 (FULLTEXT)

    • 支持地理空间数据类型

    • 支持地理空间索引

    • 不支持哈希索引

    • 支持索引缓存

    • 锁粒度:表,即表级锁

    • 不支持 MVCC

    • 支持复制

      • 需要在服务器中实现,而不是在存储引擎中实现
    • 存储限制

      • 256 TB
    • 不支持 T 树索引

    • 不支持事务

    • 支持更新数据字典中的统计信息


二、InnoDB 存储引擎特点

MySQL -- 11 -- MySQL存储引擎MyISAM和InnoDB之间的区别(8.0)_第2张图片

  • 如上所示,共有以下特性

    • 支持 B 树索引

    • 支持备份或时间点恢复

      • 需要在服务器中实现,而不是在存储引擎中实现
    • 不支持集群数据库

    • 支持聚集索引

    • 支持压缩数据

    • 支持数据缓存

    • 支持数据加密

      • 需要在服务器中,通过加密功能来实现

      • 在 MySQL5.7 以及更高的版本中,支持静态数据表空间加密

    • 支持外键

    • 支持全文索引 (FULLTEXT)

      • MySQL5.6 版本开始支持
    • 支持地理空间数据类型

    • 支持地理空间索引

      • MySQL5.7 版本开始支持
    • 不支持哈希索引

      • InnoDB 在内部将哈希索引用于其自适应哈希索引 (adaptive hash index) 功能

      • InnoDB 支持的哈希索引是自适应的,当 InnoDB 注意到某些索引值被使用的非常频繁时,它会在内存中基于 B-Tree 索引之上再创建一个哈希索引,这样就让 B-Tree 索引也具有了哈希索引的一些优点,比如:快速的 Hash 查找,这是一个完全自动的、内部的行为,不能人为干预是否在一张表中生成哈希索引

    • 支持索引缓存

    • 锁粒度:行,即行级锁

    • 支持 MVCC

    • 支持复制

      • 需要在服务器中实现,而不是在存储引擎中实现
    • 存储限制

      • 64 TB
    • 不支持 T 树索引

    • 支持事务

    • 支持更新数据字典中的统计信息


三、归纳总结

  • MyISAM和InnoDB之间的常见区别

    • MyISAM 不支持聚集索引,InnoDB 支持聚集索引

    • MyISAM 不支持数据缓存,InnoDB 支持数据缓存 (两者都支持索引缓存)

    • MyISAM 不支持外键,InnoDB 支持外键

    • MyISAM 支持全文索引,InnoDB 在 MySQL5.6 版本开始支持全文索引

    • MyISAM 不支持哈希索引,InnoDB 也不支持哈希索引,但其内部支持自适应哈希索引

    • MyISAM 默认使用表级锁,不支持行级锁;InnoDB 默认使用行级锁,同时也支持表级锁

    • MyISAM 不支持事务,InnoDB 支持事务

你可能感兴趣的:(MySQL,MySQL,MyISAM,InnoDB)