返回信息流rt,谢谢
通过『我邮2.0』发布
这是一条镜像帖。来源:北邮人论坛 / database / #10344同步于 2017/2/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
小白求问,性别列适合建索引吗,为什么
ylxbei
2017/2/8镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
今天看《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+树索引。
可是是四个或者五个或者六个等等。 @zc199102 @soleman @yqyqyqyqyqy @Z123579
【 在 ipfox 的大作中提到: 】
: 不适合,总共就三个可能的值