
表 T 包含联合索引 (A, B) 和三个二级索引 (C)、(C, A) 和 (C, B)
CREATETABLET(
AINT(11),
BINT(11),
CINT(11),
PRIMARYKEY(A,B),
KEYC(C),
KEYCA(C,A),
KEYCB(C,B)
);
为了能够进行回表查询,二级索引会保存聚簇索引的值,但当聚簇索引为联合索引时,三个二级索引分别是怎样保存聚簇索引的?难道也是将聚簇索引追加到二级索引后面,将 (C) 保存为 (C, A, B),(C, A) 保存为 (C, A, A, B),(C, B) 保存为 (C, B, A, B) 吗?
1 xiangyuecn 2020 年 11 月 15 日 视觉上,建 CB 就可以了,C 、CA 多余,说不定数据库就是按你说的这样存的 |
2 geebos PRO 确实是这样,因为二级索引要根据主键才能回表查询 |
3 douya0808 OP @xiangyuecn 似乎确实如您所说 我看答案中 (C) 会追加主键成为 (C, A, B),(C, A) 中由于已有 A,故仅追加 B 成为 (C, A, B),(C, B) 中已有 B,故仅追加 A 成为 (C, B, A),但是并不知道是遵循什么样的规则,网上的大部分文章都是追加的单字段索引,没有介绍主键为联合索引时二级索引是以什么规则追加的 |