首页 > 数据库 >Mysql如何给字符串添加索引(前缀索引)

Mysql如何给字符串添加索引(前缀索引)

时间:2024-03-11 09:00:32浏览次数:22  
标签:前缀 email 索引 添加 Mysql index2 index1 id

在日常开发中,我们经常给字符串添加索引,那么给字段添加索引有什么技巧吗,我们看看下面的例子,我们给一个邮箱添加索引,应该如何添加呢

看看下面这条sql

select *  from user where email ='[email protected]'

如果我们不添加索引,肯定是要进行全表扫描的,那么我们如何添加呢有两种方式

alter table user add index index1(email)
alter table user add index index2(email(6))

上面两种方式都是在添加索引,不同点就是第二种添加的仅仅是邮箱的前缀索引,那么他的结构表现如下图

ndex2每个索引中仅仅存储了字段的前6个字符,而index1存储了整个字符串,我们分别在不同索引下执行下面的语句

select id,name,email  from user where email='[email protected]'

如果使用index1,他的执行过程如下

在index1中找到符合条件的记录,获取id=5
然后使用id=1,在主键索引上获取整行记录
在index1寻找下一条记录,直到发现不满足位置,循环结束
如果使用index2,他的执行过程如下

在index2中找到符合条件的值,获取到id=1
然后在主键索引中找到id=1的数据,发现不符合
在index2继续寻找,id=2,然后在主键上找到行记录,发现不符合
循环上面步骤,直到符合的记录
我们发现使用index2虽然占用的空间小,但是他对搜索的性能没有更好的提高,而是要多扫描几行记录。

是不是发现前缀索引不是很好呢,然而并不是的,我们如果把索引的长度修改成8,然后在index2中仅仅找到一条符合记录,因此只需要扫描一行就够了。

于是,我们发现选择合适的前缀长度,既可以节省空间,也可以不用增加更多的查询成本.

参考

标签:前缀,email,索引,添加,Mysql,index2,index1,id
From: https://www.cnblogs.com/zjw-blog/p/18065293

相关文章

  • MYSQL学习笔记23: 多表查询(自连接内连接+左右外连接)
    多表查询(自连接)自连接查询,可以是内连接查询,也可以是外连接查询select字段列表from表A别名Ajoin表A别名Bon条件...;自连接内连接查询员工以及所属领导的名字#可以这样写selecte1.name'员工',e2.name'上司'fromempe1joinempe2one1.man......
  • MYSQL学习笔记24: 多表查询(联合查询,Union, Union All)
    多表查询(联合查询,union,unionall)union查询需要多张表的列数一致,字段类型也保持一致对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集select字段列表from表A...union[all]select字段列表from表B...;查询出薪资低于10000,或年龄......
  • MYSQL学习笔记25: 多表查询(子查询)[标量子查询,列子查询]
    多表查询(子查询)子查询,也称嵌套查询子查询的语句可以是insert/update/delete/select中的任何一个根据子查询的结果不同,可以分为:标量子查询(结果为单个值)列子查询(结果为一列)行子查询(子查询结果为一行)表子查询(子查询结果为多行多列)select*fromt1wh......
  • MySQL-扩展
    存储引擎体系结构连接层最上层是一些客户端和链接服务,主要是完成一些类似于链接处理、授权认证及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。服务层第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内......
  • Mysql-基础
    数据模型可以建立多个数据库,各数据库隔离数据库中可以建立多各关系型数据表SQL分类DDL数据定义语言,用来定义数据库对象(数据库、表、字段)数据库操作查询查询所有数据库SHOWDATABSE;查询当前数据库SELECTDATABASE();创建创建数据库CREATADATABASE[IFNOTEXIS......
  • 蓝桥杯算法集训 - Week1:二分、前缀和、差分算法
    蓝桥杯算法集训-Week1本系列随笔用于整理AcWing题单——《蓝桥杯集训·每日一题2024》的系列题型及其对应的算法模板。一、二分查找二分算法原理复习参考:二分查找-Hello算法Ⅰ、二分模板boolcheck(intx){/*...*/}//检查x是否满足某种性质//区间[l,r]被划分......
  • Mysql8.0在windows系统安装一直卡在Starting the server的解决方案
    报错:Beginningconfigurationstep:StartingServerAttemptingtostartserviceMySQL80一直卡在这里,手动启动服务也起不起来情况一:到这里直接显示叉情况二:一直停留在StartingServer可以参考下述步骤进行操作:1、使用Win+R-->运行“services.msc”-->打开服务管理......
  • 分布式锁——JVM锁、MySQL锁解决多线程下并发争抢资源
    分布式锁——JVM锁、MySQL锁解决库存超卖问题引入库存扣案例需求背景电商项目中,用户购买商品后,会对商品的库存进行扣减。需求实现根据用户购买商品及商品数量,对商品的库存进行指定数量的扣减publicStringdeductStock(LonggoodsId,Integercount){//1.查询商品......
  • flnkcdc+datastream实现mysql到mysql数据同步
    一、maven依赖<dependency><groupId>org.apache.flink</groupId><artifactId>flink-clients</artifactId><version>1.18.1</version></dependency><dependency>......
  • MySQL三种日志
    一、undolog(回滚日志)1.作用:(1)保证了事物的原子性(2)通过readview和undolog实现mvcc多版本并发控制2.在事物提交前,记录更新前的数据到undolog里,回滚的时候读取undolog来进行回滚3.undolog格式有一个rtx_id(上一次事物修改的id)和roll_ptr(指向需要回滚的版本)二、redolog1.......