MySQL枚举类型的小范围字段应不应该加索引?

MySQL枚举类型的小范围字段应不应该加索引?

回答这个问题前,要根据实际情况来,如果表数据不大,只有几百几千,那完全没有必要加索引;反之,则建议加。

案例:表引擎是InnoDB,有三千多万的数据,id为主键自增,sex性别是enum(‘0’,‘1’,‘2’),数据大小是1.8G,索引大小是1.2G,合计3G

在这里插入图片描述
sex字段分布的数据情况是:0有几个,2有几千个,1最多,有两千多万个;当要根据sex条件去查询时,比如:select * from bankcard.gd_visit where sex = '2';如果sex没有加索引,那么这条SQL就会全表扫描,三千多万的数据量进行全表扫描,内存基本会溢出,不被打死才怪。然后再看sex加了索引之后的情况,执行

select * from bankcard.gd_visit where sex = '0';
select * from bankcard.gd_visit where sex = '2';

表现还行,返回的时间是毫秒级的
![在这里插入图片描述](https://img-blog.csdnimg.cn/3efd494d23344e73b6e94b2323e79605.png
但是执行

select * from bankcard.gd_visit where sex = '1';

因为sex='1’有两千多万数据,占了总表数据记录数的绝大部分,所以即使sex加了索引,在这条SQL中的意义不大,也差不多要全表扫描,内存也基本会溢出。想要优化的话,可以一次查少一点,比如

select * from bankcard.gd_visit where sex = '1' limit 50;

表现还是不错的,基本毫秒级返回。如果sex条件就要包含在分页搜索中,当页码很多时,也就是偏移量很大时,可以对limit性能进行优化,上篇文章中讲到MSQL大表分页查询时limit优化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值