MySQL - InnoDB 和 MyISAM 的索引实现的区别

InnoDB 和 MyISAM 底层都是 B+ 树的实现,但是二者却完全不同 。

主键索引文件存储不同

MyISAM 引擎的索引文件和数据文件是分离的,而 InnoDB 引擎的索引文件和数据文件是不分离的。
MyISAM 引擎的叶子节点存储的是数据文件的地址,而 InnoDB 的叶子节点是既存储了索引文件,也存储了数据文件。

MyISAM 中的主键索引存储结构图:

InnoDB 中的聚簇索引存储结构图:

InnoDB 中的主键索引,查询效率要比 MyISAM 快

        InnoDB 主键索引,叶子节点存储了整表数据,在执行查询操作时,InnoDB 只需要查一次就能拿到数据记录;而 MyISAM 主键索引的叶子节点只是存储了数据文件的地址,它在执行查询操作时,需要先查询出数据文件的地址,然后再根据地址拿到数据记录,所以 MyISAM 需要查询两次。

辅助索引不同

  • InnoDB 中的辅助索引(非聚簇索引),叶子节点存储的是聚簇索引;
  • MyISAM 中的辅助索引(普通索引),叶子节点仍然存储数据文件的地址。

MyISAM 中的辅助索引存储结构图(和上面是一样的):

InnoDB 中的辅助索引存储结构图:

InnoDB 中的辅助索引,查询效率比 MyISAM 慢

        InnoDB 辅助索引,叶子节点存储的是主键聚簇索引,因此它需要先查询到聚簇索引,然后再进行回表查询,去聚簇索引中拿到数据记录;而 MyISAM 辅助索引,叶子节点仍然存储的是数据文件的地址,它虽然也需要查两次,但是它第二次查询要比 InnoDB 中的回表查询要快。

相关推荐

  1. Mysqlmyisaminnodb区别

    2023-12-11 05:56:02       53 阅读
  2. MyISAMInnoDB存储引擎区别

    2023-12-11 05:56:02       58 阅读
  3. mysqlMyISAMInnoDB区别

    2023-12-11 05:56:02       37 阅读
  4. Mysql数据库——InnoDBMyISAM区别与联系

    2023-12-11 05:56:02       39 阅读
  5. INNODBMyISAM有什么区别

    2023-12-11 05:56:02       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-11 05:56:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-11 05:56:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-11 05:56:02       82 阅读
  4. Python语言-面向对象

    2023-12-11 05:56:02       91 阅读

热门阅读

  1. python 下载 python 离线安装包等

    2023-12-11 05:56:02       59 阅读
  2. SAP-PP:PP模块相关BAPI持续汇总

    2023-12-11 05:56:02       39 阅读
  3. bisect --- 数组二分查找算法

    2023-12-11 05:56:02       51 阅读
  4. gRPC之gRPC Middleware

    2023-12-11 05:56:02       45 阅读
  5. Python高级算法——动态规划

    2023-12-11 05:56:02       57 阅读
  6. AI 中台

    2023-12-11 05:56:02       49 阅读
  7. [C++] Makefile的语法规则

    2023-12-11 05:56:02       58 阅读
  8. Redis面试题

    2023-12-11 05:56:02       61 阅读
  9. 【Pandas分组聚合】 groupby()、agg() 方法的使用

    2023-12-11 05:56:02       67 阅读
  10. 说说react的事件机制?

    2023-12-11 05:56:02       60 阅读