Mysql 优化:status这类字段适合加索引吗?

值重复率高的字段不适合建索引

 

理论文章会告诉你值重复率高的字段不适合建索引。不要说性别字段只有个值,网友亲测,一个字段使用拼音首字母做值,共有26种可能,加上索引后,百万加的数据量,使用索引的速度比不使用索引要慢!

 

通过上述的实验数据,我们可以得出关于枚举字段索引的结论:

如果where 只查索引字段,查询会使用索引,且效率提升明显!

如果where 查询索引字段+非索引字段,如果查询索引枚举值较少的这部分数据,效率有提升;

如果where 查询索引字段+非索引字段,如果查询枚举值相差不大或者查询较多的这部分数据时,索引大大降低了查询效率!可怕的是,比全表索引效率还要低的多!

 

枚举值是否需要建立索引?

通过上述的实验,我们可以看到有时我们添加索引不仅不会提升效率,反而变成了累赘。

 

因此对于"枚举值字段是否要建立索引?"

这个问题需要考虑的因素比较多;

比如表中已有总索引数量、查询频率、索引字段修改是否频繁、是否会索引字段与非索引字段组合查询等等,需要综合考虑

 

经过这一系列的实验, 并不是说增加索引不会提升效率,而是防止出现"索引字段+非索引字段"这种情况,毕竟这类枚举值字段用到的地方比较多。

 

但如果片面的来看的话,单纯从"提升查询未发送记录数据的效率" 角度来说的话,为send_flag建立索引是会提升效率的。

但是得保证不能出现send_flag条件与其他非索引字段同时使用的情况,否则反而成了累赘。因此是否有必要创建索引,需要综合考虑到项目其他因素!

 

例如"sex男女(012)"这类字段无特殊要求不需要单纯查询,则不需要建立索引

 

要关注字段作为查询条件时的影响结果集来建索引,而不是随便一个字段都可以建!

select countdistinct status/count* FROM 表名。数值越大越适合建索引status 明显不适合,status 字段不常变化可选用位图索引。否则可考虑组合索引;

来源网络总结;

 

文章来源:刘俊涛的博客 欢迎关注公众号、留言、评论,一起学习。

__________________________________________________________________________________

若有帮助到您,欢迎点击推荐,您的支持是对我坚持最好的肯定(*^_^*)

耶和华是我的牧者,我必不至缺乏。
原文地址:https://www.cnblogs.com/lovebing/p/15149356.html