MySQL中的性别字段到底加不加索引
准备
首先针对MySQL 性别字段到底加不加索引,其实按照创建索引的原则之一 区别度高的情况下才会使用索引,为什么?
区别度低难道就不能使用索引?区别度低难道使得索引失效了吗?
给MySQL的性别字段添加索引,MySQL到底是否会使用?
环境
MySQL 5.7 & MySQL8.0 两个版本最常用的,如果得到的结论是一致的,那么就摒弃版本不一样的问题。
MySQL8.0 t1 数据量100w ;MySQL5.7 sys_user 10w

测试
MySQL8.0, 不加索引查询 ,select * from t1 where sex = ‘男’ ,耗时0.624s ,可以看到是全表扫描


MySQL8.0, 性别 加索引查询 ,select * from t1 where sex = ‘男’ ,耗时1.305s,可以看到使用到了索引,并不是索引失效


MySQL5.7, 不加索引查询 ,select * from t1 where sex = ‘男’ ,耗时1.006s,可以看到是全表扫描


MySQL5.7, 加索引查询 ,select * from t1 where sex = ‘男’ ,耗时 1.098s,可以看到使用到了索引


总结
MySQL 性别字段到底加不加索引,实际上与索引创建规则之一 区分度有关,性别字段假设有100w数据,50w男、50w女
区别度几乎等于 0 , select count(DISTINCT sex)/count(*) from sys_user ,实际上对于性别字段不适合创建索引,是因为select * 操作,还得进行50w次回表操作
根据主键从聚簇索引中找到其他字段 ,这一部分开销从上面的测试来说还是比较大的,所以从性能角度来看 不建议性别字段加索引,加上索引并不是索引失效,而是回表操作使得变慢的
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
windows下mysql 8.0.16 安装配置方法图文教程
这篇文章主要为大家详细介绍了windows下mysql 8.0.16 安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2019-05-05
MySQL中count(distinct col...)组合使用的注意要点详解
@count()是一个聚合函数,返回指定匹配条件的行数,开发中常用来统计表中数据、全部数据、不为null数据或者去重数据,这篇文章主要给大家介绍了关于MySQL中count(distinct col...)组合使用的注意要点,需要的朋友可以参考下2024-08-08


最新评论