面试八股之MySQL篇2——索引篇

 🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。

✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!

🔥个人主页Ethan Yankang
🔥专栏:MySQL||Java八股文
🔥本篇概览:有关MySQL的索引知识

目录

 1、数据结构对比

(1)B tree

(2)B+ tree

(3)总结

2、聚簇索引与非聚簇索引

(1)什么是聚簇索引和非聚簇索引?

(2)回表查询

3、覆盖索引

(1)超大分页问题

(2)创建覆盖索引

(3)总结

 4、索引创建原则

(1)总结

(2)补充:联合索引

5、什么情况下索引会失效

(1)违反最左前缀法则

(2)范围查询右边的列,不能使用索引

(3)不要在索引列上进行运算操作,索引将失效

(4)字符串不加单引号,造成索引失效。(类型转换)

(5)以%开头的Like模糊查询,索引失效

总结


 1、数据结构对比

(1)B tree

(2)B+ tree


B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构


 

(3)总结

2、聚簇索引与非聚簇索引

(1)什么是聚簇索引和非聚簇索引?


聚簇索引主要是指数据与索引放到一块,B+树的叶子节点保存了整行数据,主键在作为聚簇索引的有且只有一个。
非聚簇索引值指的是数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个,一般我们自己定义的索引都是非聚簇索引。

(2)回表查询


回表的意思就是通过二级索引找到对应的键值,然后再通过主键值找到聚集索引中所对应的整行数据,这个过程就是回表。

3、覆盖索引

覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到

(1)超大分页问题

超大分页一般都是在数据量比较大时,我们使用了limit分页查询,并且需要对数据进行排序,这个时候效率就很低,我们可以采用覆盖索引和子查询来解决

先分页查询数据的id字段,确定了id之后,再用子查询来过滤,只查询这个id列表中的数据就可以了
因为查询id的时候,走的覆盖索引,所以效率可以提升很多。

以下是一个覆盖索引的具体例子: 假设有一个表 `students` ,包含字段 `id`(主键)、`name`、`age`。 创建了一个索引 `idx_name_age` 包含 `name` 和 `age` 字段。 现在有一个查询: `SELECT name, age FROM students WHERE name = '张三'` 。 在这个查询中,通过索引 `idx_name_age` 就可以直接获取到满足条件的 `name` 和 `age` 信息,而无需再去查找表中的数据行,这就是覆盖索引发挥作用了。因为查询所需要的列都在索引中直接找到了,避免了回表操作,提高了查询效率。

(2)创建覆盖索引

要创建覆盖索引,可以按照以下步骤进行:

1. **确定需要创建索引的表和字段**:

确定要在哪个表上创建索引,以及要包含在索引中的字段。

2. **使用`CREATE INDEX`语句**:

使用`CREATE INDEX`语句来创建索引。

例如,如果要在表`students`的`name`和`age`字段上创建索引,可以使用以下语句: ```sql CREATE INDEX idx_name_age ON students (name, age); ``` 在上述语句中,`idx_name_age`是索引的名称,可以根据需要自定义。`students`是要创建索引的表名,`(name, age)`是要包含在索引中的字段列表。 创建覆盖索引后,在查询中使用到这些索引字段时,数据库可以直接从索引中获取数据,而无需再进行回表操作,从而提高查询效率。

(3)总结


覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它性能高。会直接走聚集索引查询,一次索引扫描,直接返回数据 

如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select*

——————————————————
尽量在返回的列中都包含添加索引的字段

 4、索引创建原则


 

(1)总结

大频、查询、联合、控制

(2)补充:联合索引

5、什么情况下索引会失效

(1)违反最左前缀法则

在 MySQL 中,当使用联合索引时,如果查询条件没有遵循最左前缀法则,可能会导致索引无法被充分利用或完全不能使用索引。

最左前缀法则是指在查询中要按照联合索引中字段的顺序依次使用条件。

例如,有一个联合索引 `(col1, col2, col3)`,如果查询条件中只使用了 `col3` 而没有使用 `col1` 和 `col2` ,或者使用 `col2` 和 `col3` 而没有 `col1` ,就违反了最左前缀法则,此时索引可能就不能发挥最佳效果或无法使用索引。

以下是一些违反最左前缀法则的常见情况示例:

```sql

-- 只使用了 col3,违反最左前缀法则 SELECT * FROM table WHERE col3 = 'value';

-- 先使用 col2 再使用 col1,顺序错误,违反最左前缀法则 SELECT * FROM table WHERE col2 = 'value' AND col1 = 'value';

```

(2)范围查询右边的列,不能使用索引

(3)不要在索引列上进行运算操作,索引将失效

(4)字符串不加单引号,造成索引失效。(类型转换)

(5)以%开头的Like模糊查询,索引失效

总结

📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤ 分享👥 留言💬thanks!!!
📚愿大家都能学有所得,功不唐捐!

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

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

相关文章

Springboot阶段项目---《书城项目》

一 项目介绍 本项目采用集成开发平台IntelliJ IDEA开发了在线作业成绩统计系统的设计与实现,实现了图书商城系统的综合功能和图形界面的显示,可以根据每个用户登录系统后,动态展示书城首页图书,实现了分类还有分页查询&#xff0c…

Linux应用入门(二)

1. 输入系统应用编程 1.1 输入系统介绍 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等。用户经过这些输入设备与Linux系统进行数据交换。这些设备种类繁多,如何去统一它们的接口,Linux为了统一管理这些输入设备实现了一套能兼容所有输入设备的…

怎么压缩pdf pdf在线压缩 pdf文件压缩大小

pdf文件无论在何种设备上打开,PDF文件都能保持其原始的布局和格式,这对于文档共享和打印非常重要。PDF不仅支持文本,还能嵌入图像、视频、音频以及动态链接等元素。PDF文件支持加密和密码保护,可以限制访问、编辑、复制或打印文档…

K8S认证|CKA题库+答案| 5. 创建 Ingress

5 . 创建 Ingress 您必须在以下Cluster/Node上完成此考题: Cluster Master node Worker node k8s master …

基于Tensorflow卷积神经网络垃圾智能分类系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着城市化进程的加速,垃圾问题日益严重,垃圾分类成为解决这一问题的关…

浅谈金融行业数据安全分类分级

数据安全管理是一项从上而下的、多方配合开展的工作。在进行数据安全管理组织架构建设时,需要从上而下建设;从而全面推动数据安全管理工作的执行和落地;以保证数据安全的合法合规、并长效推动业务的发展和稳定运行。 金融行业机构应设立数据…

「项目」负载均衡在线OJ(ONLINE_JUDGE)系统

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

技术驱动未来,全面揭秘 Sui 的生态发展和布局

在不到一年的时间里,由 Mysten Labs 团队创立的 Layer1 区块链 Sui 迅速崛起,成功跃升至去中心化金融(DeFi)的前十名。根据 DeFi Llama 的数据,Sui的总锁定价值(TVL)在短短四个月内增长超过 100…

深度学习之基于Tensorflow+Flask框架Web手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是深度学习领域中的一个经典问题,也是计算机视觉领域的重要应用之一。…

BFT Robotics - 您的智能自动化伙伴

“买机器人,上BFT” 自动化和机器人技术是推动现代工业发展的重要力量。BFT Robotics以其创新的产品系列和定制化解决方案,为企业提供了一条通往高效、智能生产环境的道路。通过采用BFT Robotics的产品和服务,企业不仅能够提高生产效率&#…

iView实现表格拖拽列宽度,列显示顺序及显示字段

需要实现表格列宽度调整,选择展示表格字段,以及显示顺序,先看效果,每次变动后保存到本地缓存中,也可以与后台配合保存到数据库,实现用户自定义表格. 1.安装vuedraggable实现拖拽 npm i vuedraggable2.新建组件 FilterColumns.vue 我这里默认把操作列放到最后一个并且不允许…

机器学习(五) -- 监督学习(3) -- 决策树

系列文章目录及链接 上篇:机器学习(五) -- 监督学习(2) -- 朴素贝叶斯 下篇:机器学习(五) -- 监督学习(4) -- 集成学习方法-随机森林 前言 tips&#xff1a…

学习Uni-app开发小程序Day23

今天学习了将上一章的所有核算的js,抽离出去,让在其他地方可以直接调用,然后和适配抖音的办法,封装网络请求; 抽离公共方法 如何将公共方法抽离? 1、在根目录创建一个目录,一般起名是:utils 2…

物联网网关在电梯按需维保方案中起到什么作用?梯联网网关

为减少电梯故障和预防电梯事故,保障人身和财产安全,基于物联网技术的电梯按需维保已在全国多地陆续推行,做到了电梯安全隐患预测式排查,处理问题更具科学性、针对性和精准性,有效提升了电梯运行的安全性。那么&#xf…

深度学习之基于YoloV5入侵检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着信息技术的飞速发展,网络安全问题日益凸显。入侵检测系统(IDS&#xff0…

IC设计运营管理ERP适合中小型芯片公司

在数字化、智能化的今天,企业资源计划(ERP)系统已成为企业管理的重要工具。特别是在中小型芯片公司中,IC设计运营管理ERP更是发挥着举足轻重的作用。 首先,ERP系统能够实现对企业内各种资源的集成管理,包括资金、人力资源、设备和…

我的第一个JAVA程序IDEA版

目录 第一步 新建一个空项目第二步 新建模块第三步 新建包第四步 新建类第五步 新建main方法 第一步 新建一个空项目 第二步 新建模块 第三步 新建包 第四步 新建类 然后在包文件夹下新建类 第五步 新建main方法

线程池(C++)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 线程池 实现线程类 #pragma once#include <pthread.h> #include <iostream> #include <vector> #include <string> #include <cstdlib> #include <cstring> #include <functional&…

Python深度学习基于Tensorflow(12)实战生成式模型

文章目录 Deep Dream风格迁移参考资料 Deep Dream DeepDream 是一项将神经网络学习模式予以可视化展现的实验。与孩子们观察云朵并尝试解释随机形状相类似&#xff0c;DeepDream 会过度解释并增强其在图像中看到的图案。 DeepDream为了说明CNN学习到的各特征的意义&#xff0c…

「51媒体」线下活动媒体同步直播,云分发,分流直播

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 线下活动除了邀请嘉宾&#xff0c;邀请媒体&#xff0c;邀请行业大咖KOL&#xff0c;来为活动站台&#xff0c;背书外&#xff0c;我们也可以将线下的活动同步在线上进行直播&#xff0c…