2022-04-18

MySQL非聚簇索引方法分享(二)

我们也可以同时以多个列的大小作为排序规则,也就是同时为多个列建立索引,比方说我们想让 B+ 树按照 c2 和 c3 列

的大小进行排序,这个包含两层含义:

先把各个记录和页按照 c2 列进行排序。 在记录的 c2 列相同的情况下,采用 c3 列进行排序

注意一点,以 c2 和 c3 列的大小为排序规则建立的 B+ 树称为 联合索引 ,本质上也是一个二级索引。它的意 思与分别为 c2 和 c3

此视频由 小红书www.xiaohongshutuiguang.cn)转载提供

列分别建立索引的表述是不同的,不同点如下:

建立 联合索引 只会建立如上图一样的 1 棵 B+ 树。

为 c2 和 c3 列分别建立索引会分别以 c2 和 c3 列的大小为排序规则建立 2 棵 B+ 树。

① 在 InnoDB 存储引擎中,我们只需要根据主键值对 聚簇索引 进行一次查找就能找到对应的记录,而在 MyISAM 中却需要进行一次 回表

操作,意味着 MyISAM 中建立的索引相当于全部都是 二级索引 。

② InnoDB 的数据文件本身就是索引文件,而 MyISAM 索引文件和数据文件是 分离的 ,索引文件仅保存数 据记录的地址。

③ InnoDB 的非聚簇索引 data 域存储相应记录 主键的值 ,而 MyISAM 索引记录的是 地址 。换句话说, InnoDB

的所有非聚簇索引都引用主键作为 data 域。

④ MyISAM 的回表操作是十分 快速 的,因为是拿着地址偏移量直接到文件中取数据的,反观 InnoDB 是通

过获取主键之后再去聚簇索引里找记录,虽然说也不慢,但还是比不上直接用地址去访问。

⑤ InnoDB 要求表 必须有主键 ( MyISAM 可以没有 )。如果没有显式指定,则 MySQL 系统会自动选择一个

可以非空且唯一标识数据记录的列作为主键。如果不存在这种列,则 MySQL 自动为 InnoDB 表生成一个隐 含字段作为主键,这个字段长度为 6

个字节,类型为长整型。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MySQL非聚簇索引方法分享 概念:回表 我们根据这个以 c2 列大小排序的 B+ 树只能确定我们要查找记录的主键...
    xu1234567阅读 187评论 0 0
  • InnoDB数据页的7个组成部分,知道了各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的...
    括儿之家阅读 400评论 0 0
  • MySQL——掘金小册《MySQL 是怎样运行的:从根儿上理解 MySQL》学习笔记 InnoDB 记录存储结构 ...
    小王的平凡生活_jerome阅读 1,248评论 0 1
  • 参考资料:[掘金] MySQL 是怎样运行的:从根儿上理解 MySQL(https://juejin.cn/boo...
    susu2016阅读 685评论 0 2
  • 索引 平衡二叉树:左右节点的层级相差不大于1、左节点小于本节点,本节点小于右节点,最多拥有两个子节点 B树: 枝节...
    小王的平凡生活_jerome阅读 213评论 0 0