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 字段不常变化可选用位图索引。否则可考虑组合索引;

    来源网络总结;

     

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

    __________________________________________________________________________________

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

    耶和华是我的牧者,我必不至缺乏。
  • 相关阅读:
    【NX二次开发】获取体是实体还是片体UF_MODL_ask_body_type()
    【creo】CREO5.0+VS2019配置(还没写完)
    【NX二次开发】导出x_t、导入x_t例子,UF_PS_export_data、UF_PS_import_data
    UG_PS Parasolid相关的操作
    【NX二次开发】创建老版的基准平面uf5374
    UnityShader之固定管线命令Combine纹理混合【Shader资料4】
    UnityShader之固定管线Fixed Function Shader【Shader资料3】
    UnityShader之Shader分类篇【Shader资料2】
    UnityShader之Shader格式篇【Shader资料1】
    Unity3D事件函数的执行顺序
  • 原文地址:https://www.cnblogs.com/lovebing/p/15149356.html
Copyright © 2011-2022 走看看