如何给字符串字段添加索引

MySQL是支持前缀索引的,可以定义字符串的一部分作为索引,如果创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。

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

如上两个创建索引的语句,index2(email(6))这个索引结构中只取邮箱字段的前6个字节,所以占用的空间会更小,这就是使用前缀索引的优势,但是也同时带来了损失,比如会增加额外的记录扫描次数。

使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。这个和实际存储的数据有关。也就是需要关注数据的区分度,区分度越高越好,区分度越高,意味着重复的键值越少。因此,可以通过统计索引上有多少个不同的值来判断要使用多长的前缀。

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;

使用前缀索引很可能会损失区分度,所以需要预先设定一个可以接受的损失比例,比如5%。然后在返回的L4-L7中,找出不小于L*95%的值。

前缀索引也会影响覆盖索引,既前缀索引就用不上覆盖索引对查询性能的优化了。

如果业务需求上只有等值查询,在对身份证号(前6位是地址码,前缀区分度比较小)这类数据设置前缀索引时还可以采取以下两种方法:

1、使用倒序存储,查询的时候参考下述语句

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

2、使用hash字段,即在表上再创建一个整数字段,来保存身份证号的校验码,同时在这个字段上创建索引。

-- 添加字段并创建索引alter table t add id_card_crc int unsigned, add index(id_card_crc);-- 查询语句select field_list from t where id_card_crc=crc32('input_id_card_string') and id_card='input_id_card_string'

使用倒序存储和hash字段都不支持范围查询。

正文止。

感兴趣的朋友,欢迎关注我的公众号哈,公众号上已经集成了AI大模型,大家可以过来聊天、问问题了

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

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

相关文章

openGauss学习笔记-194 openGauss 数据库运维-常见故障定位案例-分析查询语句长时间运行的问题

文章目录 openGauss学习笔记-194 openGauss 数据库运维-常见故障定位案例-分析查询语句长时间运行的问题194.1 分析查询语句长时间运行的问题194.1.1 问题现象194.1.2 原因分析194.1.3 处理办法 openGauss学习笔记-194 openGauss 数据库运维-常见故障定位案例-分析查询语句长时…

【python入门】day24:千年虫问题、京东购物流程、根据星座测试性格特点

千年虫 yList[82,17,73,56,84,0,99] print(原列表:,yList) for index,val in enumerate(yList):yList[index]2000 if val0 else 1900 print(更改后列表:,yList) yList.sort() print(排序后列表:,yList)enumerate的作用:会把列表中…

[金融支付]EMV是什么?

文章目录 EMVCoEMVCo是谁?EMVCo是做什么的?EMVCo是如何运作的?EMVCo 是否强制要求 EMV 规范? EMVEMV的历史背景EMV技术的一些关键点 EMV TechnologiesEMV 认证EMV的三层认证 EMV规范在全球各地存在差异参考 EMVCo EMVCo是谁&…

Kafka的简介及架构

目录 消息队列 产生背景 消息队列介绍 常见的消息队列产品 应用场景 消息队列的消息模型 Kafka的基本介绍 简介 Kafka的架构 Kafka的使用 Kafka的shell命令 Kafka的Python API的操作 完成生产者代码 完成消费者代码 消息队列 产生背景 消息队列:指数据在一个容器…

C# 微信小程序获取群id

前提 有个需求,需要限制小程序的抽奖只能在某个群内,需要知道谁在群里面,但是微信并没有提供谁在群里面的方法,不过提供了获取群id的方法,这样加上限制分享就能保证群里的参加,即时分享出去了,…

Vue3 中使用 Vuex 和 Pinia 对比之 Vuex的用法

本文基于 Vue3 的 composition API 来展开 Vuex 和 Pinia 的用法比较 Pinia传送门 Vuex传送门 Vuex 状态管理的核心概念 状态- 驱动应用的数据源;视图 - 以声明方式将状态映射到视图;操作 - 响应在视图上的用户输入导致的状态变化 下面是源自Vuex 官…

每日一题——LeetCode1154.一年中的第几天

方法一 列举法: 用一个数组把每个月份的天数都列举出来 判断闰年,是闰年2月份有29天 循环对当前月份之前的月份天数求和 加上当天月份的天数 var dayOfYear function(date) {let year date.slice(0, 4);let month date.slice(5, 7);let day dat…

第十二章Session

第十二章Session 1.什么是Session2.Session的创建与获取3.session域中数据的存取4.Session超时的控制5.浏览器和session之间关联的技术内幕 1.什么是Session 注意:前面的Cookie是保存在客户端,而session是在服务端的 2.Session的创建与获取 这里Session…

2024几个测试接口的好工具,效率加倍~

作为一名后端程序员,一定要对自己写的接口负责,保证接口的正确和稳定性。因此,接口测试也是后端开发中的关键环节。 但我相信,很多朋友是懒得测试接口的,觉得这很麻烦。一般自己写的接口自己都不调用,而是…

RT-Thread入门笔记4-跑马灯线程实例

RT-Thread操作系统是基于线程调度的多任务系统。 线程状态切换 调度过程是一种完全抢占式的基于优先级的调度算法。 支持8/32/256优先级,其中0表示最高,7/31/255表示最低。最低优先级7/31/255优先级用于空闲线程。 支持以相同优先级运行的线程。 共享时…

如何理解线程池中的参数设计

如何理解线程池中的参数设计 你的线程池的参数怎么配置?线程数量设置多少合理?如何确定一个线程池中的人物已经完成了为什么不建议使用java自带的Executors创建线程池线程池里面的阻塞队列设置多少合理? 考察:了解你对技术的掌握…

springboot摄影跟拍预定管理系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

如何通过 3 个步骤,管理项目可交付成果?

没有可交付成果,就没有项目。无论是构建软件、公寓、汽车还是其他东西,项目工作都可以定义为实现项目可交付成果。 项目管理中的可交付成果 项目可交付成果是项目要实现的最终结果。“可交付成果 "的内容没有限制,可以是实体产品&…

石大版跳一跳(UPC)

题目描述 还记得微信上那个风靡全国的跳一跳小程序吧,估计曾经也受到不少我校同学的喜爱吧。话说唐克也在玩这款游戏,不过,与一般玩家的境界不一样,唐克并不沉迷于游戏,唐克玩游戏是为了开发游戏,作为中国石…

tiktok_浅谈hook ios之发包x-ss-stub

frida-trace ios手机一部,需要越狱的电脑一台idacrackerXI 目标app: ipa 包,点击前往 密码:8urs 协议分析起始从抓包开始,个人习惯 一般安卓逆向可以直接搜关键词,但是ios 都在 Mach-O binary (reverse…

[JAVA数据结构] 认识 Iterable、Collection、List 的常见方法签名以及含义

目录 (一)Iterable 1. 介绍 2. 常见方法 (二)Collection 1. 介绍 2. 常见方法 (三) List 1. 介绍 2. 常见方法 总结 (一) Iterable 1. 介绍 Iterable接口是Java中的一个接口,它是集合框架中的根接口之一。Iterable接口表示实现了迭代功能,即可以通过迭…

JetCache源码解析——缓存处理

在Java技术体系中,如果想要在不改变已有代码逻辑的情况下,对已有的函数进行功能增强,一般可以使用两种方式,如AOP(Aspect Oriented Programming),即面向切面编程,以及代理模式&#…

最详细手把手教你安装 Vivado2019.2

Vivado 是 FPGA 厂商赛灵思公司(Xilinx)于 2012 年起发布的集成设计环境。 Vivado 2019.2 是 2019 年 Xilinx 推出的 Vivado 最后一个版本,相对稳定,并推出了新式的嵌入式开发平台 Vitis。 软件下载 官网可下载各个版本百度网盘…

Android 通知简介

Android 通知简介 1. 基本通知 图1: 基本通知详情 小图标 : 必须提供,通过 setSmallIcon( ) 进行设置.应用名称 : 由系统提供.时间戳 : 由系统提供,也可隐藏时间.大图标(可选) : 可选内容(通常仅用于联系人照片,请勿将其用于应用图标),通过setLargeIcon( ) 进行设置.标题 : 可选…

一日难再晨及时当勉励 date

文章目录 Linux shell 获取更改系统时间默认输入显示时区世界协调时格式化日期更多信息 Linux shell 获取更改系统时间 … note:: 时光只解催人老,不信多情,长恨离亭,泪滴春衫酒易醒。 - 晏殊《采桑子时光只解催人老》date命令可以用来打印…