面试宝典

MySQL 字符串索引优化方案

字符串建立索引的优化#1.建立前缀索引#假设建立一个支持邮箱登录的用户表,对于邮件字段来说,可以有以下几种建立索引的方式:直接对整个字符串建立索引alter table SUser add index index1(email);对整个字符串的前一部分建立索引-前缀索引alter table SUser add&nbs

字符串建立索引的优化#

1. 建立前缀索引#

假设建立一个支持邮箱登录的用户表,对于邮件字段来说,可以有以下几种建立索引的方式:

  1. 直接对整个字符串建立索引

alter table SUser add index index1(email);

对整个字符串的前一部分建立索引 - 前缀索引

alter table SUser add index index2(email(6));
方式 2 相较于 方式 1 来说,利用前缀索引,占用的空间更小。但有可能造成性能的损失,读取数据的次数变多。
假设在 user 表中存在zhangsp1234@gmail.com, zhangs1pzxyz@qq.com , zhangssxyz@xxx.com, 三条记录。
有这样一条语句 select id,name,email from SUser where email='zhangssxyz@xxx.com';
使用 index1 索引时,流程如下:
在 index1 中,找到名字是 zhangssxyz@xxx.com 的记录,获取 ID.
在主键索引上对应 ID的行,判断 email 是否正确,将记录加入结果集。
接着取 index1 索引的下一条记录,发现不满足 email 格式,结束循环。
使用 index2 索引:
在 index2 中,找到名字是 zhangs 的记录,获取 ID.
在主键索引上对应 ID的行,这时拿到的是 zhangss1234@gmail.com 的行, 发现不符合,丢弃。
接着在 index2 循环,拿到下一条记录 ID。
在主键索引上对应 ID的行,这时拿到的是 zhangsspzxyz@qq.com 的行, 发现不符合,丢弃。
接着在 index2 循环,拿到下一条记录 ID。
在主键索引上对应 ID的行,这时拿到的是 zhangssxyz@xxx.com 的行, 发现符合,纳入结果集。
接着在 in

原创不易,完成人机校验,阅读全文

相关推荐