当前位置: 首页 > news >正文

MySQL索引面试题(高频)

文章目录

  • 前言
  • 什么时候需要(不需要))使用索引?
  • 有哪些优化索引的方法
    • 前缀索引优化
    • 索引覆盖优化
    • 索引失效场景
  • 总结


前言

今天来讲一讲 MySQL 索引的高频面试题。主要是针对前一篇文章 MySQL索引入门(一文搞定)进行查漏补缺,建议大家看完前一篇再看这一篇。


什么时候需要(不需要))使用索引?

我们先来看看索引的优缺点吧。

优点:可以快速查询的效率,查询是在增删改查中最经常使用。

缺点:创建索引是要用到物理空间的。其次维护索引,当数据库进行增删改的时候,索引也要动态的进行变化。这样子的话过多的索引会影响到数据库的增删改性能。

从优缺点我们来切入什么需要使用索引,什么时候不需要索引

什么时候需要使用索引?

  1. 当字段经常出现在 where 当做条件中,我们可以考虑根据字段添加索引。
  2. 当字段经常出现在 order By 和 Group By 时,我们可以考虑根据字段添加索引。
  3. 当字段频繁的查询,而少更新时,我们可以考虑根据字段添加索引。

什么时候不需要使用索引?

  1. 反之,将字段频繁的更新时,不需要使用索引,因为索引的意义就是加速查询,既然用不上就不需要创建了。

  2. 当数据量少时,不用因为查询性能慢而烦恼时,就不需要使用索引。

  3. 当字段经常设计计算、函数等操作时,不需要使用索引,因为这会造成索引失效。

  4. 当有 where,order by ,group by 等关键词使用不到的字段,不需要使用索引,因为索引的价值是快速定位,这样子的话提现不出价值而且索引会占用物理空间。

  5. 当有字段存储了大量的重复数据时,不需要创建索引,比如性别,只有男/女两种值,这时候的索引是起不到作用的。因为MySQL 有个优化器会在执行前将SQL进行优化,如果有太多重复的数据,优化器默认是不会使用索引的。

有哪些优化索引的方法

前缀索引优化

前缀索引优化就是当类型为字符串(比如:varchar)的字段,该字段过长时,我们可以使用前缀索引就是将该字段的前几个字符作为索引。

这样子既可以节省空间,又可以起到索引优化查询的性能。

当然这种也有缺点。

  1. order by 无法使用前缀索引
  2. 前缀索引无法起到索引覆盖优化。

索引覆盖优化

索引覆盖优化一般是使用联合索引,就是B+树的叶子结点是包含索引(key)和数据(data)的。当使用联合索引时
,如果联合索引中的值包含了我们需要查询的值,那么就不用进行回表查询了。回表查询就是根据这次查询到的索引值再进行一次查询。

比如学生表,我们要查询出studentName,studentPhone,其中card(身份证卡号)是唯一值,我们创建联合索引(card、studentName、studentPhone)。然后我们使用SQL语句进行查询

select card,studentName, studentPhone from student where card = '445122335464654654463'

这样子就是索引覆盖优化拉。

索引失效场景

就不详细解释了,大家感兴趣底层原理可以阅读 “小林coding”的网站。

  1. 当like关键字进行左模糊(%xx)查询和左右模糊(%xx%)查询时会失效。因为索引是整个值,进行左模糊的话无法匹配出来。
  2. 当索引字段进行计算,函数,类型转化时,会出现索引失效。
  3. 当联合索引不符合最左匹配原则时会出现索引失效。
  4. where 条件字段中,如果 OR 前字段是索引列,后字段不是,会索引失效。

总结

总的来说,我们只要符合索引的优缺点就可以知道索引该如何使用拉。优点:快速查询,缺点:浪费空间,影响数据更新性能。

最后建议大家都可以去读一读 小林coding网站的索引篇,知道底层原理,知识才更牢固。


有启发点个赞 🌹

好文章不要错过,最近給大家分享的文章

MySQL的基础知识

1.MySQL的基础架构
2.SQL语句的执行流程
3.MySQL 的存储引擎

MySQL 索引

1.MySQL索引入门(一文搞定)

预计下篇分享:MySQL 事务基础知识

本篇参考:小林coding ,JavaGuide

我是小辉,正在进行 Java 实习的 24 届应届毕业生。欢迎关注,持续分享,包括但不限于技术文章。全网同名…

相关文章:

MySQL索引面试题(高频)

文章目录 前言什么时候需要(不需要))使用索引?有哪些优化索引的方法前缀索引优化索引覆盖优化索引失效场景 总结 前言 今天来讲一讲 MySQL 索引的高频面试题。主要是针对前一篇文章 MySQL索引入门(一文搞定)进行查漏补…...

SouthLeetCode-打卡24年02月第2周

SouthLeetCode-打卡24年02月第2周 // Date : 2024/02/05 ~ 2024/02/11 039.有效的字母异位词 (1) 题目描述 039#LeetCode.242.简单题目链接#Monday2024/02/05 给定两个字符串 *s* 和 *t* ,编写一个函数来判断 *t* 是否是 *s* 的字母异位词。 **注意&#xff1…...

Rust CallBack的几种写法

模拟常用的几种函数调用CallBack的写法。测试调用都放在函数t6_call_back_task中。我正在学习Rust&#xff0c;有不对或者欠缺的地方&#xff0c;欢迎交流指正 type Callback std::sync::Arc<dyn Fn() Send Sync>; type CallbackReturnVal std::sync::Arc<dyn Fn…...

Redis突现拒绝连接问题处理总结

一、问题回顾 项目突然报异常 [INFO] 2024-02-20 10:09:43.116 i.l.core.protocol.ConnectionWatchdog [171]: Reconnecting, last destination was 192.168.0.231:6379 [WARN] 2024-02-20 10:09:43.120 i.l.core.protocol.ConnectionWatchdog [151]: Cannot reconnect…...

css中选择器的优先级

CSS 的优先级是由选择器的特指度&#xff08;Specificity&#xff09;和重要性&#xff08;Importance&#xff09;决定的&#xff0c;以下是优先级规则&#xff1a; 特指度&#xff1a; ID 选择器 (#id): 每个ID选择器计为100。 类选择器 (.class)、属性选择器 ([attr]) 和伪…...

python3字符串内建方法split()心得

python3字符串内建方法split()心得 概念 用指定分隔符&#xff08;默认是任何空白字符&#xff09;将字符串拆分成列表。 语法 string.split(separator.max) 参数1.split(参数2&#xff0c;参数3) 参数1&#xff1a;string 字符串&#xff0c;需要被拆分的字符串。 参数2&a…...

html的列表标签

列表标签 列表在html里面经常会用到的&#xff0c;主要使用来布局的&#xff0c;使其整齐好看. 无序列表 无序列表[重要]&#xff1a; ul &#xff0c;li 示例代码1&#xff1a; 对应的效果&#xff1a; 无序列表的属性 属性值描述typedisc&#xff0c;square&#xff0c;…...

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture04反向传播

lecture04反向传播 课程网址 Pytorch深度学习实践 部分课件内容&#xff1a; import torchx_data [1.0,2.0,3.0] y_data [2.0,4.0,6.0] w torch.tensor([1.0]) w.requires_grad Truedef forward(x):return x*wdef loss(x,y):y_pred forward(x)return (y_pred-y)**2…...

PyTorch使用Tricks:学习率衰减 !!

文章目录 前言 1、指数衰减 2、固定步长衰减 3、多步长衰减 4、余弦退火衰减 5、自适应学习率衰减 6、自定义函数实现学习率调整&#xff1a;不同层不同的学习率 前言 在训练神经网络时&#xff0c;如果学习率过大&#xff0c;优化算法可能会在最优解附近震荡而无法收敛&#x…...

10MARL深度强化学习 Value Decomposition in Common-Reward Games

文章目录 前言1、价值分解的研究现状2、Individual-Global-Max Property3、Linear and Monotonic Value Decomposition3.1线性值分解3.2 单调值分解 前言 中心化价值函数能够缓解一些多智能体强化学习当中的问题&#xff0c;如非平稳性、局部可观测、信用分配与均衡选择等问题…...

2 Nacos适配达梦数据库实现方案

1、修改源代码方式 Nacos 原生是不支持达梦数据库的,所以就要想办法让它 “支持”,因为是开源软件,我们可以从源码入手,在流行的 1.x 、2.x 或最新版本代码的基本上进行修改。 主要涉及到以下内容的修改: com/alibaba/nacos/persistence/datasource/ExternalDataS...

【Gitea】配置 Push To Create

引 在 Git 代码管理工具使用过程中&#xff0c;经常需要将一个文件夹作为仓库上传到一个未创建的代码仓库。如果 Git 服务端使用的是 Gitea&#xff0c;通常会推送失败。 PS D:\tmp\git-test> git remote add origin http://192.1.1.1:3000/root/git-test.git PS D:\tmp\g…...

关于postgresql数据库单独设置某个用户日志级别(日志审计)

前言&#xff1a; 很多时候我们想让数据库日志打印详细一点&#xff0c;但是又担心会对数据库本身产生一些不可控的影响&#xff0c;还会担心数据库产生的庞大的日志导致主机资源不太够用的影响。那么今天我们就通过讲解给单个用户设置 log_statement来解决以上这些问题。 注…...

阿里云ECS香港服务器性能强大、cn2高速网络租用价格表

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品&#xff0c;中国电信CN2高速网络高质量、大规格BGP带宽&#xff0c;运营商精品公网直连中国内地&#xff0c;时延更低&#xff0c;优化海外回中国内地流量的公网线路&#xff0c;可以提高国际业务访问质量。阿里云服务…...

实战打靶集锦-025-HackInOS

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 提权5.1 枚举系统信息5.2 探索一下passwd5.3 枚举可执行文件5.4 查看capabilities位5.5 目录探索5.6 枚举定时任务5.7 Linpeas提权 靶机地址&#xff1a;https://download.vulnhub.com/hackinos/HackInOS.ova 1. 主机…...

list.stream().forEach()和list.forEach()的区别

list.stream().forEach() 和 list.forEach() 在 Java 中都是用于遍历集合元素的方法&#xff0c;但它们在使用场景和功能上有所不同&#xff1a; list.forEach()&#xff1a; 是从 Java 8 开始引入到 java.util.List 接口的标准方法。直接对列表进行迭代&#xff0c;它采用内部…...

JS基础之JSON对象

JS基础之JSON对象 目录 JS基础之JSON对象对象转JSON字符串JSON转JS对象 对象转JSON字符串 JSON.stringify(value,replacer,space) value:要转换的JS对象 replacer:(可选)用于过滤和转换结果的函数或数组 space:(可选)指定缩进量 // 创建JS对象 let date {name:"张三…...

嵌入式学习之Linux入门篇——使用VMware创建Unbuntu虚拟机

目录 主机硬件要求 VMware 安装 安装Unbuntu 18.04.6 LTS 新建虚拟机 进入Unbuntu安装环节 主机硬件要求 内存最少16G 硬盘最好分出一个单独的盘&#xff0c;而且最少预留200G&#xff0c;可以使用移动固态操作系统win7/10/11 VMware 安装 版本&#xff1a;VMware Works…...

大模型中的token是什么?

定义 大模型的"token"是指在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;模型所使用的输入数据的最小单元。这些token可以是单词、子词或字符等&#xff0c;具体取决于模型的设计和训练方式。 大模型的token可以是单词级别的&#xff0c;也可以是子…...

跳表是一种什么样的数据结构

跳表是有序集合的底层数据结构&#xff0c;它其实是链表的一种进化体。正常链表是一个接着一个用指针连起来的&#xff0c;但这样查找效率低只有O(n)&#xff0c;为了解决这个问题&#xff0c;提出了跳表&#xff0c;实际上就是增加了高级索引。朴素的跳表指针是单向的并且元素…...

【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 1.题目链接&#xff1a; 无 2.详解思路&#xff1a; 题目描述&#xff1a;输入两个正整数&#xff0c;输出其最大公因数和最小公倍数 一般方法&#xff1a;最大公因数&#xff1a;穷加法&#xff1b;最小公倍数&…...

ETL快速拉取物流信息

我国作为世界第一的物流大国&#xff0c;但是在目前的物流信息系统还存在着几大的痛点。主要包括以下几个方面&#xff1a; 数据孤岛&#xff1a;有些物流企业各个部门之间的数据标准不一致&#xff0c;难以实现数据共享和协同&#xff0c;容易导致信息孤岛。 操作繁琐&#x…...

17.1 SpringMVC框架_SpringMVC入门与数据绑定(❤❤)

17.1 SpringMVC框架_SpringMVC入门与数据绑定 1. SpringMVC入门1.1 MVC介绍1.2 环境配置1. 依赖引入2. web配置文件:DispatchServlet配置3. applicationContext.xml配置4. 开发Controller控制器(❤❤)1.3 MVC处理流程图2. Spring MVC数据绑定2.1 URL Mapping2.2 URL Mapping三个…...

Leetcode 11.盛水最多的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。…...

《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)

文章目录 7.1 使用 Go Modules 管理依赖 - 掌舵向未来7.1.1 基础知识讲解7.1.2 重点案例:Web 服务功能描述实现步骤扩展功能7.1.3 拓展案例 1:使用数据库功能描述实现步骤扩展功能7.1.4 拓展案例 2:集成 Redis 缓存功能描述实现步骤...

【论文精读】IBOT

摘要 掩码语言建模(MLM)是一种流行的语言模型预训练范式&#xff0c;在nlp领域取得了巨大的成功。然而&#xff0c;它对视觉Transformer (ViT)的潜力尚未得到充分开发。为在视觉领域延续MLM的成功&#xff0c;故而探索掩码图像建模(MIM)&#xff0c;以训练更好的视觉transforme…...

Yolo V5在实时视频流中的建筑物与彩钢房检测:性能评估与改进方法

Yolo V5在实时视频流中的建筑物与彩钢房检测&#xff1a;性能评估与改进方法 文章目录 Yolo V5在实时视频流中的建筑物与彩钢房检测&#xff1a;性能评估与改进方法概述Yolo V5模型概述建筑物与彩钢房检测的挑战实时视频流处理流程模型性能评估改进方法实验与分析结论与展望 概…...

图——最小生成树实现(Kruskal算法,prime算法)

目录 预备知识&#xff1a; 最小生成树概念&#xff1a; Kruskal算法&#xff1a; 代码实现如下&#xff1a; 测试&#xff1a; Prime算法 &#xff1a; 代码实现如下&#xff1a; 测试&#xff1a; 结语&#xff1a; 预备知识&#xff1a; 连通图&#xff1a;在无向图…...

Unity3D xLua开发环境搭建详解

前言 xLua是一种基于Lua语言的开发框架&#xff0c;可以帮助开发者在Unity3D中使用Lua脚本来开发游戏。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; 在本文中&#xff0c;我们将详细介绍如何搭建Unity…...

Python笔记-super().init(root)的作用

假设我们有一个名为Animal的父类&#xff0c;它有一个属性color&#xff0c;在其构造函数__init__中被初始化&#xff1a; class Animal:def __init__(self, color):self.color color现在&#xff0c;我们想创建一个Animal的子类&#xff0c;名为Dog。Dog类有自己的属性name&…...