Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.6k views
in Technique[技术] by (71.8m points)

MySQL:聚簇索引与二级索引

二级索引末尾会保存主键的值,这个好理解,保存主键等待需要时回表
但如果主键是联合索引,那么二级索引的末尾存的是什么呢?
`

CREATE?TABLE?T?(

A?INT(11),?
B?INT(11),?
C?INT(11),?
PRIMARY?KEY?(A,?B),?
KEY?C?(C),?
KEY?CA?(C,?A)

);

`
名为 C 的二级索引末尾,是将联合索引 (A, B) 中 A, B 两个字段的值都保存在末尾的吗?
名为 CA 的二级索引末尾,也是将联合索引 (A, B) 中 A, B 两个字段的值都保存在末尾的吗?

这个问题上网查都不知道该搜什么关键字,只能来请教各位大佬了


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

先说答案:
1、名为 C 的二级索引末尾,是将联合索引 (A, B) 中 A, B 两个字段的值都保存在末尾的吗?
是的。名为 C 的二级索,由于有联合主键的出在,实际上是(C,A,B)
2、名为 CA 的二级索引末尾,也是将联合索引 (A, B) 中 A, B 两个字段的值都保存在末尾的吗?
是保存在末尾,但是有一点需要注意,他保存的其实是(C,A,B),要特别注意不是(C,A,A,B)
相关文档可以参考官方链接:15.6.2.1 Clustered and Secondary Indexes
相关部分摘录如下:

In InnoDB, each record in a secondary index contains the primary key columns for the row, as well as the columns specified for the secondary index

所以你可以看出来,针对你问题中的描述:

KEY?C?(C),?
KEY?CA?(C,?A)

这俩索引其实都是(C,A,B),保留一个就可以了

我在学索引的时候,也有过同样的疑问。
所以对你这个问题感同身受,立马跑来回答。也不知道题主何时能看到。
最后感谢题主问出了我以前也有过的问题,我决定本周整理一篇文章梳理下索引,下周一来这个问题下发链接


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...