值重复率高的字段不适合建索引
理论文章会告诉你值重复率高的字段不适合建索引。不要说性别字段只有两个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢!
通过上述的实验数据,我们可以得出关于枚举字段索引的结论:
如果where 只查索引字段,查询会使用索引,且效率提升明显!
如果where 查询索引字段+非索引字段,如果查询索引枚举值较少的这部分数据,效率有提升;
如果where 查询索引字段+非索引字段,如果查询枚举值相差不大或者查询较多的这部分数据时,索引大大降低了查询效率!可怕的是,比全表索引效率还要低的多!
枚举值是否需要建立索引?
通过上述的实验,我们可以看到有时我们添加索引不仅不会提升效率,反而变成了累赘。
因此对于"枚举值字段是否要建立索引?"
这个问题需要考虑的因素比较多;
比如表中已有总索引数量、查询频率、索引字段修改是否频繁、是否会索引字段与非索引字段组合查询等等,需要综合考虑
经过这一系列的实验, 并不是说增加索引不会提升效率,而是防止出现"索引字段+非索引字段"这种情况,毕竟这类枚举值字段用到的地方比较多。
但如果片面的来看的话,单纯从"提升查询未发送记录数据的效率" 角度来说的话,为send_flag建立索引是会提升效率的。
但是得保证不能出现send_flag条件与其他非索引字段同时使用的情况,否则反而成了累赘。因此是否有必要创建索引,需要综合考虑到项目其他因素!
例如"sex男女(012)"这类字段无特殊要求不需要单纯查询,则不需要建立索引
要关注字段作为查询条件时的影响结果集来建索引,而不是随便一个字段都可以建!
select count(distinct status)/count(*) FROM 表名。数值越大越适合建索引。status 明显不适合,status 字段不常变化可选用位图索引。否则可考虑组合索引;
来源网络总结;
文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。
__________________________________________________________________________________
若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(*^_^*)