标签:查询 select use https 简单 直接 resource article 反转
假如有一个系统,使用的是邮箱作为账号的,每次登陆都要查询邮箱,如果不给邮箱加索引的话,每一次查询都是全表查询,所以给邮箱加索引是必需的,但是如果给邮箱加普通索引的话又感觉浪费空间
添加索引
普通索引
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
标签:查询 select use https 简单 直接 resource article 反转
原文地址:https://www.cnblogs.com/zx125/p/11750036.html