首页 > 为什么重复值高的列(比如性别)不能作为索引?
头像
可乐鸡打包加饭
编辑于 2020-08-28 12:03
+ 关注

为什么重复值高的列(比如性别)不能作为索引?

这是一道面试题,我先讲一下我的思路,如果有错误请各位指点
当我们以某一列sex作为二级索引时,在B+树中:

  • 每一个叶子节点存储了多条页,这些页存储了主键值和索引列sex数据,并且这些数据根据sex来排列。
  • 每一个非叶子节点里则同样存储了多条页,每条页中存储了到达下一层节点中的页号,主键值和sex列数据。这些数据同样按照sex值排序。

这里我用<<MySQL是怎样运行的:从根儿上理解MySQL>>书里的图来大致描述这个结构:
img

当我们查询条件的是索引列sex时,遍历这颗b+树,拿条件中的sex值和非叶子节点中的每个页里的sex值进行比较,从而确定到达下一层节点的某个页,进而最终到达某个叶子节点中的某条页。
如果索引列sex的值是重复的,那么在非叶子节点中的比较过程中,如果该节点中的每条页的sex值和查询条件的sex值都相同,就无法确定应该到达下一层的哪一个页中。
我看书上说在非叶子节点的比较过程中,如果索引列都相同的情况下,就比较主键值。那么如果查询条件里没有主键值,那么应该怎么查找?全表查找吗?

全部评论

(2) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

近期精华帖

热门推荐