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
个字节,类型为长整型。