大家都知道索引分聚集索引和非聚集索引,性别字段因为可重复肯定只能建立非聚集索引,然而因为非聚集索引叶子节点存储的是索引值和聚集索引值,需要回表。所以在性别这种辨别度较低的字段上建立索引,索引树可能只有两个节点,跟线性查找没有太大区别,并且因为回表的存在导致在聚集索引树和非聚集索引树来回切换反而导致查询时间更慢。并且维护该索引还要一定的开销。另外,数据库优化器最终很大概率也不会选择走这个索引。综上,在辨别度较低的字段上建立索引得不偿失。
但是,并不是通用规则!
若这些可选择性非常低的字段,在其中的一种分布非常少,而且查询非常频繁的话,可以对该字段进行索引!
比如有一个枚举字段[1,2,3], 在上百万行数据中,1占1%, 2占%2, 3占%97,然后业务经常需要查询1和2的数据,那么就可以在该字段进行索引。
- 大量的回表操作
- 维护索引的开销