美文网首页
索引-字符串

索引-字符串

作者: 我是陈炜 | 来源:发表于2020-01-16 13:04 被阅读0次

假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的:

 create table SUser(ID bigint unsigned primary key,
email varchar(64),
 ... )engine=innodb; 

由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的语句:
mysql> select f1, f2 from SUser where email='xxx';

可以建立两种索引

mysql> alter table SUser add index index1(email);
或
mysql> alter table SUser add index index2(email(6));

直接创建完整索引

其中 第一个句式使用的是email作为索引,第二个是使用email前6个字符作为前缀索引。


email 索引结构
前缀索引结构

前缀索引

前缀索引可能会导致额外的扫描成本(重复值)。为了解决这个问题 可以用distinct 来作区分度选择。

mysql> 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;

倒序索引

倒序索引

mysql> select field_list from t where id_card = reverse('input_id_card_string');

由于身份证号的最后 6 位没有地址码这样的重复逻辑,所以最后这 6 位很可能就提供了足够的区分度。当然了,实践中你不要忘记使用 count(distinct) 方法去做个验证。

hash字段做索引

mysql> alter table t add id_card_crc int unsigned, add index(id_card_crc);

然后每次插入新记录的时候,都同时用 crc32() 这个函数得到校验码填到这个新字段。由于校验码可能存在冲突,也就是说两个不同的身份证号通过 crc32() 函数得到的结果可能是相同的,所以你的查询语句 where 部分要判断 id_card 的值是否精确相同。

相关文章

  • python 字符串

    字符串操作 + 字符串连接操作 * 字符串复制操作 [] 字符串索引 通过索引访问指定位置的字符,索引从头(0)...

  • 字符串基础语法

    索引访问 字符串[索引] 切片访问字符串[开始,结束,步长] 判断字符串是否只包含空格 字符串.isspace...

  • 数组方法

    .length---->字符串的长度 .charAt(索引)----->返回值是指定的索引位置的字符串,超出索引结...

  • 05-字符串的操作

    字符串的操作方法 [] 字符串索引操作,通过索引访问指定位置的字符,索引从0开始 [::] 字符串取片操作完整格式...

  • 数组去重和字符串方法

    字符串方法: charAt() 获取字符串元素 括号里面传索引 indexOf() 获取字符串的索引,如果字符串里...

  • 数组去重和字符串方法

    字符串方法: charAt() 获取字符串元素 括号里面传索引 indexOf() 获取字符串的索引,如果字符串里...

  • 2018-12-05数组去重和字符串方法

    例: 字符串方法 charAt()获取字符串元素 括号里面传索引 .indexOf()获取字符串的索引,如果字符串...

  • python函数知识归纳笔记(2)

    字符串相关操作 字符串连接 字符串赋值 [索引值] 字符串通过索引访问位置 从0开始 [::] 字符串取片操作,实...

  • JS基础学习:Date对象、String属性

    Date对象 字符串常用属性 .length 字符串 的长度 .charAt(索引) 返回值是指定索引位置的字符串...

  • JavaScript 字符串方法

    字符串长度 length 属性返回字符串的长度: 字符串索引 indexOf() 查询首次出现的索引 没有找到则返...

网友评论

      本文标题:索引-字符串

      本文链接:https://www.haomeiwen.com/subject/nlkbactx.html