zoukankan      html  css  js  c++  java
  • 字符索引优化

    字符索引优化

    引入

    假如有一个系统,使用的是邮箱作为账号的,每次登陆都要查询邮箱,如果不给邮箱加索引的话,每一次查询都是全表查询,所以给邮箱加索引是必需的,但是如果给邮箱加普通索引的话又感觉浪费空间

    前缀索引

    添加索引

    普通索引
    alter table SUser add index index1(email);
    前缀6的索引
    alter table SUser add index index2(email(6));
    

    索引结构

    搜索区别

    select id,email from SUser where email='zhangssxyz@xxx.com'
    

    使用index1

    1.直接搜索index1的索引树,找到zhangssxyz@xxx.com这条记录

    2.然后查下一条记录,如果满足条件了就直接返回结果集(覆盖索引)

    使用index2

    1.直接搜索index2的索引树,找到zhangs这条记录

    2.回表查询邮箱是否满足

    3.继续下一条记录

    注意

    使用了前缀索引就不能使用覆盖索引了

    前缀索引的总结

    1.可以节省索引的存储空间,又不会增加太多的查询成本(有前提,本来就存在着回表操作,而且设置了合适的前缀索引长度)

    2.无法使用覆盖索引的优化

    如何设置合理的前缀索引

    1.前缀索引长度

    通过案例我们知道,要是前缀索引长度设置的不合理会额外的增加许多的额外查询

    select count(distinct email) as L from SUser;
    
    select count(distinct left(email,4))as L4, count(distinct left(email,5))as L5, count(distinct left(email,6))as L6, count(distinct left(email,7))as L7,from SUser;
    

    可以用以上语句查询前缀的重复率,以不重复率95%为界限,前缀越短越好

    2.反转

    比方说身份证号,前几位都是省市的编码,存在着大量的重复,然而最后几位却是无序的,我们可以倒着存,这样就可以更有效了

    3.对字符串进行hash等算法的计算唯一值

    需要新加一个字段,但是可能会存在重复,但是索引的长度更短了

    总结

    如果必须要用的字符为索引,需要考虑到很多东西,比方说数据量,数据量少的话,就不用优化了,可靠安全,而且简单

    参考链接

    https://time.geekbang.org/column/article/71492

  • 相关阅读:
    c#中开发ActiveX的学习笔记
    [转]李战大师悟透delphi 第七章 组织你的模块
    在网页中实现QQ的屏幕截图功能
    vs.net的调试小技巧之#define debug(适合新手)
    socket中的byte消息格式设计
    [转]李战大师悟透delphi第五章 包
    [转]李战大师悟透delphi 第九章 多层体系结构
    [转]李战大师悟透delphi第一章 delphi的原子世界
    重温delphi之控制台程序:Hello World!
    silverlight中的socket编程注意事项
  • 原文地址:https://www.cnblogs.com/zx125/p/11750036.html
Copyright © 2011-2022 走看看