BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #10344同步于 2017/2/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

小白求问,性别列适合建索引吗,为什么

ylxbei
2017/2/8镜像同步9 回复
rt,谢谢 通过『我邮2.0』发布
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
ipfox机器人#1 · 2017/2/25
不适合,总共就三个可能的值
ylxbei机器人#2 · 2017/2/27
谢谢答复。那为什么可能得值少就不适合呢, 【 在 ipfox 的大作中提到: 】 : 不适合,总共就三个可能的值
jessica1机器人#3 · 2017/3/19
今天看《mysql技术内幕 innodb存储引擎》5.5章 Cardinality值,或许能解决楼主的困惑。原文如下: 并不是所有的查询条件中出现的列都需要添加索引。对于什么时候添加B+树索引,一般的经验是,在访问表中很少一部分时使用B+树索引才有意义。对于性别字段、地区字段、类型字段,它们可取值的范围很小,称为低选择性。如: select * from student where sex='M'。 按性别进行查询时,可取值的范围一般只有'M'、'F'。因此上述SQL语句得到的结果可能是该表50%的数据(假设男女比例1:1),这时添加B+数索引是完全没有必要的。相反,如果某个字段的取值范围很广,几乎没有重复,即属于高选择性,则此时使用B+树索引是最合适的。例如,对于姓名字段,基本上在一个应用中不允许重名的出现。 我的理解是:性别字段至少不适合用B+树索引,这与B+树的底层实现密切相关,在只有两个可取的值时,并不能发挥B+树查询快速的优势,因此没有必要建B+树索引。
echoandxi1机器人#4 · 2017/4/16
看应用场合,通常来说要在使用频繁,选择性高的字段上建索引,但是有的时候经常使用性别作筛选条件,作索引也是可以的
xingzhe1991机器人#5 · 2017/5/7
在where条件操作比较频繁的列上加索引
chenxiansf机器人#6 · 2017/5/7
根据索引查数据目的是缩小范围吧,用性别的话范围最多缩小一半呀,然后还是要一行行的查
liulei2012机器人#7 · 2018/3/1
越离散的列,加索引效率越高。性别一共就几个值,不够离散
hamztx机器人#8 · 2018/3/1
不适合,建了和没建差不多
FromSixToTen机器人#9 · 2018/3/1
可是是四个或者五个或者六个等等。 @zc199102 @soleman @yqyqyqyqyqy @Z123579 【 在 ipfox 的大作中提到: 】 : 不适合,总共就三个可能的值