MySQL 性别字段到底加不加索引


1.准备

首先针对MySQL 性别字段到底加不加索引,其实按照创建索引的原则之一 区别度高的情况下才会使用索引,为什么?区别度低难道就不能使用索引?区别度低难道使得索引失效了吗?给MySQL的性别字段添加索引,MySQL到底是否会使用?

1.1 环境

MySQL 5.7 & MySQL8.0 两个版本最常用的,如果得到的结论是一致的,那么就摒弃版本不一样的问题。
MySQL8.0 t1 数据量100w ;MySQL5.7 sys_user 10w
在这里插入图片描述

1.2 测试

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,可以看到使用到了索引

在这里插入图片描述
在这里插入图片描述

2.总结

MySQL 性别字段到底加不加索引,实际上与索引创建规则之一 区分度有关,性别字段假设有100w数据,50w男、50w女,
区别度几乎等于 0 , select count(DISTINCT sex)/count(*) from sys_user ,实际上对于性别字段不适合创建索引,是因为select * 操作,还得进行50w次回表操作,根据主键从聚簇索引中找到其他字段 ,这一部分开销从上面的测试来说还是比较大的,所以从性能角度来看 不建议性别字段加索引,加上索引并不是索引失效,而是回表操作使得变慢的。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值