zoukankan      html  css  js  c++  java
  • Mysql 优化:status这类字段适合加索引吗?

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

     

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

     

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

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

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

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

     

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

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

     

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

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

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

     

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

     

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

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

     

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

     

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

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

    来源网络总结;

     

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

    __________________________________________________________________________________

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

    耶和华是我的牧者,我必不至缺乏。
  • 相关阅读:
    scrapy 多个爬虫运行
    scrapy不抓取重复的网页解决办法
    centos7 安装mysql
    20个免费和开源数据可视化工具
    转载 CSDN 谈谈我对证券公司一些部门的理解(前、中、后台)
    scrapy 教程
    django 常见错误汇总
    python 常见错误
    python 基础知识整理
    使用SQL语法来查询Elasticsearch:Elasticsearch-SQL插件
  • 原文地址:https://www.cnblogs.com/lovebing/p/15149356.html
Copyright © 2011-2022 走看看