如何正确使用MySQL的索引呢?

news2024/11/27 6:18:48

前言:

📕作者简介:热爱编程的小七,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年!

📘相关专栏Java基础语法,JavaEE初阶,数据库,数据结构和算法系列等,大家有兴趣的可以看一看。

😇😇😇有兴趣的话关注博主一起学习,一起进步吧!

一、索引使用

1.1验证索引效率

先通过一个简单的案例,来验证一下索引,看看是否能够通过索引来提升
数据查询性能。在演示的时候,我们还是使用之前准备的一张表 tb_sku , 在这张表中准备了1000w
的记录。

这张表中id为主键,有主键索引,而其他字段是没有建立索引的。 我们先来查询其中的一条记录,看看里面的字段情况,执行如下SQL:

select * from tb_sku where id = 1\G;

可以看到即使有1000w的数据,根据id进行数据查询,性能依然很快,因为主键id是有索引的。 那么接下来,我们再来根据 sn 字段进行查询,执行如下SQL:

SELECT * FROM tb_sku WHERE sn = '100000003145001';

我们可以看到根据sn字段进行查询,查询返回了一条数据,结果耗时 20.78sec,就是因为sn没有索引,而造成查询效率很低。那么我们可以针对于sn字段,建立一个索引,建立了索引之后,我们再次根据sn进行查询,再来看一下查询耗时情况。

创建索引:

create index idx_sku_sn on tb_sku(sn) ;

然后再次执行相同的SQL语句,再次查看SQL的耗时。

SELECT * FROM tb_sku WHERE sn = '100000003145001';

我们明显会看到,sn字段建立了索引之后,查询性能大大提升。建立索引前后,查询耗时都不是一个数量级的。

1.2最左前缀法则

如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。
以 tb_user 表为例,我们先来查看一下之前 tb_user 表所创建的索引。

在 tb_user 表中,有一个联合索引,这个联合索引涉及到三个字段,顺序分别为:profession,
age,status。
对于最左前缀法则指的是,查询时,最左变的列,也就是profession必须存在,否则索引全部失效。而且中间不能跳过某一列,否则该列后面的字段索引将失效。 接下来,我们来演示几组案例,看一下具体的执行计划:

explain select * from tb_user where profession = '软件工程' and age = 31 and status
= '0';

explain select * from tb_user where profession = '软件工程' and age = 31;

explain select * from tb_user where profession = '软件工程';

以上的这三组测试中,我们发现只要联合索引最左边的字段 profession存在,索引就会生效,只不
过索引的长度不同。 而且由以上三组测试,我们也可以推测出profession字段索引长度为47、age
字段索引长度为2、status字段索引长度为5。

explain select * from tb_user where age = 31 and status = '0';

explain select * from tb_user where status = '0';

而通过上面

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握这些技巧,轻松批量压缩视频大小

如果您需要批量压缩视频文件的大小,可以借助固乔科技官网提供的固乔剪辑助手软件。下面我们将详细介绍如何使用该软件实现这一目标。 1. 进入固乔科技官网,下载并安装固乔剪辑助手软件。这款软件支持Windows和Mac操作系统,可以方便地在官网上…

Android布局转图片Bitmap

最近再写一个PDA蓝牙连接打印机打印标签(包含商品名、原价、现价、尺寸等等...)这就需要自己布局一个view样式,转换成bitmap,然后用打印机打印出来。 先看图: 下面事layout布局转bitmap的方法。 网上很多介绍View转b…

雨课堂 运动与健康 网课参考资料

整理于网络:仅用于学习交流讨论,侵删 参考文档:https://www.doc88.com/p-99629779008847.html 参考视频: 运动与健康(2021年秋网课答案 69题版本)_哔哩哔哩 | https://www.bilibili.com/video/av210112837/…

C语言自定义类型(下)

大家好,我们今天来学习C语言自定义类型剩下的内容。 目录 1.枚举 2.联合 1.枚举类型 枚举顾名思义就是一一列举。 把可能的取值一一列举。 一周的星期一到星期日是有限的7天,可以一一列举。 性别有:男、女、保密,也可以一一列…

2023年【电工(中级)】考试资料及电工(中级)找解析

题库来源:安全生产模拟考试一点通公众号小程序 电工(中级)考试资料是安全生产模拟考试一点通总题库中生成的一套电工(中级)找解析,安全生产模拟考试一点通上电工(中级)作业手机同步…

面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?

几个方面: 问题描述:什么现象?什么影响? 问题分析 解决方案 底层原理 1.问题描述 模拟高并发的场景,会出现批量的 TIME_WAIT 的 TCP 连接: 短时间后,所有的 TIME_WAIT 全都消失&#xff0…

[linux(静态文件服务)] 1.部署vue发布后的dist网页到nginx 2.偷懒的话可以用宝塔部署nginx

所以说: 1.windows下把开发好的vue工程打包为dist文件然后配置下nginx目录即可。 2.linux上不需要安装node.js环境。 3.这样子默认访问服务器ip地址,就可以打开,毕竟默认就是:80端口。 注意:如果windows下部署正常&…

C++,异常、转换函数、智能指针

目录 一、异常 1 C 异常机制: 2 使用try catch进行异常处理. 3、c 已经内置标准异常类,专业用于抛出的语法中 4 自定义异常: 5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层…

机器学习笔记:Huber Loss smooth L1 loss

1 Huber loss 1.1 介绍 Huber Loss是回归问题中的一种损失函数,它结合了均方误差MSE和绝对误差MAE的特点。 Huber Loss在误差较小的时候是平方损失,而在误差较大的时候是线性损失。因此,它在处理有噪声的数据时,尤其是存在离群点…

【从入门到起飞】JavaAPI—BigInteger,BigDecimal的使用方法

🎊专栏【Java基础】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The truth that you leave】 🥰欢迎并且感谢大家指出我的问题 文章目录 🎁BigInteger🍔获取BigInteger对象⭐获…

【数据结构-图】最小生成树

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

AWS SAA知识点整理(作成中)

共通 一些信息已经更新了,但参考题的答案还是旧的。 比如: S3的最大读写性能已经提高到 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second 并且不再要求使用random prefix Storage Amazon S3 为了提高读取的performance: For exam…

CTF 入门指南:从零开始学习网络安全竞赛

文章目录 写在前面CTF 简介和背景CTF 赛题类型介绍CTF 技能和工具准备好书推荐 写作末尾 写在前面 CTF比赛是快速提升网络安全实战技能的重要途径,已成为各个行业选拔网络安全人才的通用方法。但是,本书作者在从事CTF培训的过程中,发现存在几…

每月固定日期提醒app用哪个?手机上可固定日期提醒的工具选择哪一个

在这个繁忙的世界中,时间总是飞逝而过,我们常常需要一些方式来提醒自己按时完成一些重要的工作任务。每月固定日期提醒是其中之一,它可以涵盖很多方面的事情,从生日、账单支付到工作报告的提交。然而,如何有效地管理这…

7章:动态加载数据处理(selenium)

selenium模块和爬虫之间的关联 便捷的获取网站中动态加载的数据便捷实现模拟登录 什么是selenium模块 基于浏览器自动化的一个模块 selenium使用流程: - 环境安装:pip install selenium - 下载一个浏览器的驱动程序(谷歌浏览器&#xff…

Python爬虫之入门保姆级教程

目录 一、分析要爬取的网站 二、导入相关库 三、相关的参数 四、向网站发出请求(使用代理IP) 五、匹配 六、获取图片,保存到文件夹中(os库) 七、完整代码 总结 相信许多人都曾为如何入门Python爬虫而烦恼。今天…

MySQL 权限变更,何时生效?

本文讲述了对三种级别权限的变更后,使其生效的方法。 作者:欧阳涵,爱可生团队 DBA 成员,看到下雨知道要打伞的 2.5 次元爱好者~ 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源…

springCloud和springboot升级

一、引言 springCloud和springBoot较低版本有时候会有网络漏洞,所以随着springCloud和springBoot的升级会修复这些漏洞。那么有时候就遇到在升级过程中,遇到不兼容的问题。需要总结下来记录一下。 二、springBoot和springCloud的使用 1、springBoot的引…

【2023年11月第四版教材】第15章《风险管理》(第三部分)

第15章《风险管理》(第三部分) 5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★ 7 过程3-实施定性风险分析7.1 实施定性风险分析7.2 数据分析★★★7.3 数据表现★★★7.4 项目文件(更新&#…

Java诊断利器Arthas安装和使用

下载 curl -O https://alibaba.github.io/arthas/arthas-boot.jar先启动java项目,然后再启动 arthas-boot.jar 第一次使用arthas的时候,先按1(后面没有对应类的)安装上arthas 粘附一个进程 常用命令 dashboard 命令&#xff1a…