【MySQL】聊聊你不知道的前缀索引原理以及使用场景

背景

在本周的时候,接到一个需求,需要通过加密后的身份证 md5 去数据库里匹配。由于业务方存储的是身份证 md5+username 构建的一列,并且没有加索引。
解决方案:1.新建一列 md5的列,加索引 2.对现有的列进行加前缀索引。

并且由于是md5值,使用前缀索引区分度很高。但是为了后期业务的拓展,采用了方案1。
那么结合遇到的场景,就来聊聊前缀索引的使用场景细节。

前缀索引

在平时的使用过过程,其实很多网站支持使用邮箱进行登陆。所以可能出现。

select f1, f2 from SUser where email='xxx';
create table SUser(
ID bigint unsigned primary key,
email varchar(64), 
email_2 varchar(64)
)engine=innodb;

那么针对email字段 如何添加索引比较好。其实如果email的区分度比较好的话,可以直接对email加整个索引。 或者针对指定前缀索引。

alter table SUser add index index1(email);
alter table SUser add index index2(email_2(6));

index1索引图结构如下
在这里插入图片描述
index_2 索引如下
在这里插入图片描述
接着我们来分析index1 和 index2索引的查询过程。
其实针对于index1来说,由于对email整个字段添加了索引,当查询 email = ‘qxlxi@qq.com’ 会直接从索引树上查询到满足条件的记录。找到对应的id,然后通过主键索引树上找到整行记录。然后接着判断是否存在图和条件的,没有直接退出。

但是对于index2来说,由于只针对部分加索引,会查询符合条件的索引,比如找到第一条,然后找到id,发现不符合,接着查询,所以整个过程需要不断的拿主键id 判断等。所以合理的设置前缀索引的长度 非常有讲究,否则,可能会增加额外的记录扫描次数。

用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。

其实主要还是看字段长度的区分度,区分度高就可以避免额外查询。

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;

说白了就是,进行对比,选择一个区分度比较高的长度。

对覆盖索引的影响

EXPLAIN SELECT id,email FROM Suser WHERE email = 'qxlxi@qq.com';

在这里插入图片描述

EXPLAIN SELECT id,email FROM Suser WHERE email_2 = 'qxlxi@qq.com';

在这里插入图片描述
可以发现,使用前缀索引没有办法进行使用覆盖索引,而整个字符串的可以使用。这是因为对于前缀索引需要在回到id索引查下具体的值是否符合条件。

其他方式

比如针对身份证这种,前6位区分度不高,可以采用倒叙存储的方式。或者针对特定列创建对应的额外的索引字段。

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

针对特定学号,城市编号和@gamil.com 没有区分度,这种情况我们可以采用只保存学校编号入学年份、顺序编号即可。
在这里插入图片描述

小结

本篇文章,主要简单的介绍了下,使用字符串创建前缀索引的一些优缺点。
1.创建整个字符串可能比较浪费空间
2.创建前缀索引,节省空间,但是可能有多余的查询。
3.使用一定的区分度减少多余查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/617416.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【免费】2024年全新超强版本itvboxfast如意版影视APP源码 TV+手机双端后台PHP源码

首先,让我们了解一下ITVBox如意版影视源码的特点和优势。这一源码基于先进的技术和框架开发,具有稳定、高效的性能,能够满足影视网站的各种需求。与此同时,该源码还提供了丰富的功能和模块,包括影视资源管理、会员系统…

攻防世界-web-file_include

题目 解题 通过阅读php代码,我们明显的可以发现,这个一个文件包含的类型题 文件包含漏洞也是一种“注入型漏洞”,其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行。 require(),找不到被包含的文件时…

57. 【Android教程】相机:Camera

相机现在已经不仅仅是手机必备神器了,甚至相机的拍照质量已经是很多人买手机的首选条件了。而对于相机而言主要有两大功能:拍照片和拍视频。Android 为此两种方式: 相机 intent相机 API 本节我们就一起来看看相机的具体用法。 1. 打开 Camer…

Windows快速部署DCNv4(成功版)

文章目录 一、介绍二、编译DCNv42.1 下载源码2.2 编译DCNv4 三、报错提示3.1 Cuda is not available3.2 需要Microsoft Visual C 14.0 一、介绍 论文链接:[https://arxiv.org/pdf/2401.06197.pdf] (https://arxiv.org/pdf/2401.06197.pdf)   在这篇文章中介绍了一…

8种区块链开发者必须知道的顶级编程语言!

我来问你一个问题:请说出一种技术,它以去中心化、不可篡改和透明性等核心特征席卷了全球。 这个问题的答案是,当然是区块链,它在近些年进入大家的视野并颠覆了工商业,没有任何其他技术能够做到这一点。 预计从2020年…

通过python实现Google的精准搜索

问题背景: 我想通过Google或者其他网站通过精准搜索确认该产品是否存在,但是即使该产品不存在Google也会返回一些相关的url链接,现在想通过python实现搜索结果的精准匹配以确认该产品是否为正确的名称【可以通过google搜索到,如果…

Git的安装和配置

一、Git的介绍 代码的一套托管工具,它分为两个仓库,首先将你写的代码提交到本地仓库,这个时候只有你可以看,和你一起开发的同事看不到。将本地仓库的代码推到远程仓库(githab、gitee、gitlab等之一)&#…

斩获 32k 星!号称下一代知识库工具开源了!

AFFiNE(发音为 [ə‘fain])是一个下一代知识库平台,它将规划、整理和创造整合在一个空间。AFFiNE致力于提供一个隐私优先、开源、可定制且即用性强的解决方案,作为 Notion 、Airtable、Miro 的整合“替代品”。 Notion 、Airtable…

数据结构-二叉树-红黑树

一、红黑树的概念 红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,…

Java | Spring框架 | AOP代理机制

大家好,我是程序员影子,一名AI编程深耕者,点击左上角头像了解我的详细信息。 今天来聊一聊关于Java中的Spring AOP代理机制中的JDK动态代理与CGLIB。 一、JDK动态代理 JDK动态代理是Spring AOP默认使用的代理机制。它基于Java反射机制&…

力扣 5-11

704. 二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 这道题目的前提是数组为有序数组,同时题目还强…

边缘计算:数据处理的新范式

在不断发展的科技领域中,我们对数据的处理和管理方式正经历着一场范式转变。边缘计算的兴起正在改变传统的数据处理方法。本文将深入探讨边缘计算的涌现,探讨其对数据处理的变革性影响、带来的优势以及对各个行业的影响。 探索边缘计算 边缘计算的核心理…

Docker搭建ctfd平台

安装docker和docker-compose (1)安装docker: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun(2)安装 Docker Compose: yum install docker-compose安装失败参考下面文章 https:/…

消费金融平台公司如何做大做强自营产品

本文来自于2019年的某次内部分享沟通会,部分敏感内容已做删减。

(2024,KAN,MLP,可训练激活函数,样条函数,分层函数)Kolmogorov–Arnold 网络

KAN: Kolmogorov–Arnold Networks 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 1. 简介 2. KAN 2.1 KA 表示定理 2.2 KAN 架构 2.3 KAN 的逼近能力和缩放定律 2.4 对于…

mysql的存储结构

一个表就是一个ibd文件 .ibd文件大小取决于数据和索引,在5.7之后才会为每个表生成一个独立表空间即一个ibd文件,在此之前,所有表默认下都会存储在“系统表空间”(共享表空间),所有表都在一个ibd文件。 inn…

Tomcat7+ 弱口令 后台getshell漏洞

1 漏洞背景 Tomcat 是一个流行的开源Web应用服务器,用于部署和运行Java Web应用程序。Tomcat 7 版本中存在一个安全隐患,即默认的管理员密码可能较弱或者未被修改,攻击者可以利用这一漏洞登录到Tomcat的管理后台,并上传恶意的WAR…

Ps 滤镜:粉笔和炭笔

Ps菜单:滤镜/滤镜库/素描/粉笔和炭笔 Filter Gallery/Sketch/Chalk & Charcoal 粉笔和炭笔 Chalk & Charcoal滤镜可以模拟传统的粉笔和炭笔画风格,通过特定的纹理和线条重绘图像的高光、中间色调和阴影区域。此滤镜非常适合于为数字图像添加手绘…

SAP-CentralFinance - 学习心得2

过账总账中的交易 业务示例 创建大量日记账分录是会计日常工作的一部分。在SAP,会计可以使用不同的输入屏幕。使用所有方法,总账科目过账会自动列在损益表报表中(如果财务报表版本中包含科目)。查询已过账科目时还可显示对应的过账。 贵公司计划通过企业基金增加资本。在…

我的全新官网

科技语者-探索未来的语言和沟通 (chgskj.cn) 另外我还开放了一个网站科技语者-介绍页 (null.fit)