为什么重复值高的列(比如性别)不能作为索引?
(1)看到一个关于索引的面试题:为什么重复值高的列(比如性别)不能作为索引?
我觉得是因为以这种列作为二级索引的话,那么这颗B+树会以该列的值作为节点的排序标准,如果列值相同就以主键作为排序标准。如果该列重复值低,就可以根据该节点下的列值找到下一层节点。否则若重复值高,难以找到下一层的节点。不知道这么解释对不对?
(2)在二级索引的B+树中,叶子节点存储的是该列值和主键值,非叶子节点存储的是该列值,主键值以及到下一层节点的页号。如果在遍历到非叶子节点时,查询条件中的该列值与该节点记录的列值都相同,那么此时比较的依据是什么呢?主键值吗?如果查询条件中没有加上主键值该怎么办?
(3)在聚簇索引B+树的叶子节点中,每一个节点记录的是同一数据页下的全部记录数吗?还是说是部分记录?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
关键应该还是 区分度小,就是加了索引,需要扫描的行数还是很多,效率不高,但是建索引是需要代价的。
b+tree 中只要主键索引存的是每条详情记录,普通索引存的是主键值。
得不偿失。
索引就像目录一样,是提供给你精准定位,加快查询速度的,一本书有半本厚都是目录,每次查询翻目录都要翻半天(遍历数据),那这目录还有什么作用?除非使用limit查少量数据,这样还索引还是有一定作用的。
而且索引还会占用磁盘空间,降低数据的更新速度。
收藏这个问答