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