秋招后端开发面试题 - MySQL索引


目录

  • MySQL索引
    • 前言
    • 面试题
    • MySQL 索引篇
      • 什么是索引?
      • 索引分别有哪些优点和缺点?
      • MySQL 索引的注意事项
      • 为什么 MySQL 官方建议使用自增主键作为表的主键?
      • 索引有几种类型?分别如何创建?
      • 什么叫回表查询?
      • 在 InnDB 中主键索引为什么比普通索引的查询性能高?
      • MySQL 复合索引应该注意什么?
      • 复合索引的作用是什么?
      • 什么是最左匹配原则?它的生效原则有哪些?
      • 以下语句会走索引么?
      • 什么是前缀索引?
      • 为什么要用前缀索引?
      • 什么情况下适合使用前缀索引?
      • InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?
      • MySQL 如何指定查询的索引?
      • 在 MySQL 中指定了查询索引,为什么没有生效?
      • 如何优化身份证的索引?
      • 索引的使用场景
      • 聚簇索引和非聚簇索引
      • 你写过索引吗?
      • InnoDB 索引实现
      • MyISAM 索引实现
      • 主键索引是聚集索引还是非聚集索引?
      • MyISAM 索引实现?
      • MyISAM 索引与 InnoDB 索引的区别?
      • 简单说一说 drop、delete 与 truncate 的区别
      • delete、truncate 和 drop 分别在什么场景之下使用?
      • ⭐为什么 B+Tree 比 B-Tree 更适合实际应用中操作系统的文件索引和数据库索引?
      • ⭐Hash 索引和 B+ 树有什么区别或者说优劣呢?
      • 非聚簇索引一定会回表查询吗?
      • 创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?


MySQL索引

前言

已经找到工作了,分享秋招时的笔记。祝大家都能顺利找到自己心仪的工作。


面试题

MySQL 索引篇

什么是索引?

索引是一种帮助 MySQL 提高查询效率的数据结构

索引分别有哪些优点和缺点?

索引的优点:

  • 提高查询效率

索引的缺点:

  • 虽然提高了查询速度,但却降低了更新表的速度
  • 因为更新数据时,MySQL 不仅要更新数据,还要更新索引文件
  • 建立索引的索引文件会占用磁盘

MySQL 索引的注意事项

  • 联合索引遵循前缀原则
  • like 模糊查询,% 百分号不能在前
  • 如果 MySQL 估计使用索引比全表扫描更慢,会放弃使用索引
  • 如果 or 前面的条件的列有索引,后面没有,会放弃使用索引
  • 列类型是字符串,查询时一定要给值加引号,否则索引失效

为什么 MySQL 官方建议使用自增主键作为表的主键?

  • 页分裂问题:如果使用非自增主键作为表的主键的话,当新插入的数据会将数据页写满,mysql 就需要申请新的数据页,并且把上个数据页中的部分数据移动到新的数据页上,以确保索引有序。也就是说**会造成页分裂,大量移动数据的过程严重影响插入效率
  • 存储空间问题:自增主键存储空间小,同一个结点内能存放更多的主键,降低树的高度,减少 IO 次数

索引有几种类型?分别如何创建?

MySQL 的索引有两种分类方式:逻辑分类和物理分类

按照逻辑分类,索引可分为:

  • 主键索引:一张表只能有一个主键索引,不允许重复、不允许为 NULL
  • 唯一索引:数据列不允许重复,允许为 NULL 值,一张表可有多个唯一索引
  • 普通索引:一张表可以创建多个普通索引,可以重复,允许 NULL 值插入

按照物理分类,索引可分为:

  • 聚簇索引:InnoDB 的主键索引存储采用聚簇索引,主键和数据存放在一起
  • 非聚簇索引:MyISAM 的主键索引存储采用非聚簇索引,主键和指向数据的指针存放在一起,数据另开空间存储

什么叫回表查询?

普通索引查询到主键索引后,回到主键索引树搜索的过程,称为回表查询

在 InnDB 中主键索引为什么比普通索引的查询性能高?

因为普通索引的查询会多执行一次回表查询操作

MySQL 复合索引应该注意什么?

MySQL 中的复合索引遵循最左匹配原则

复合索引的作用是什么?

  • 多字段查询减少建立额外索引的开销
  • 覆盖索引:直接通过遍历索引取得数据,不需要回表查询减少随机的 IO 操作

什么是最左匹配原则?它的生效原则有哪些?

  • 最左匹配原则也叫最左前缀原则,在联合索引中,索引的左侧列将优先参与索引的匹配和筛选,而后续列只有在左侧列匹配的情况下才会被考虑
  • 当遇到范围查询停止匹配

以下语句会走索引么?

select * from t where year(date)>2018;

不会,因为在索引列上涉及到了运算

什么是前缀索引?

前缀索引也叫局部索引,比如给身份证的前 10 位添加索引。 类似这种给某列部分信息添加索引的方式叫做前缀索引

为什么要用前缀索引?

  • 前缀索引能有效减小索引文件的大小,让每个索引页可以保存更多的索引值,从而提高了索引查询的速度
  • 缺点:不能在 order by 或者 group by 中触发前缀索引,也不能用于覆盖索引

什么情况下适合使用前缀索引?

当字符串本身可能比较长,而且前几个字符就开始不相同,适合使用前缀索引

InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?

B 树

  • B 树的非叶子节点也保存数据,导致扇出 (节点的最大子节点数量) 减少,需要更多层级,同时增加内存和磁盘的开销,降低数据访问的效率
  • B+ 树将数据全部保存在叶子节点,减少磁盘IO的开销,提高了查询效率

Hash

  • Hash 索引适用于等值查询,但不支持范围查询和排序操作

二叉树

  • 普通二叉树的高度可能不均匀
  • 二叉树无法自动平衡,需要特殊的平衡操作来维护树的性能

红黑树

  • 红黑树虽然是一种自平衡二叉搜索树,但是在数据量巨大时,高度仍然可能增加,导致性能下降

MySQL 如何指定查询的索引?

在 MySQL 中可以使用 force index 强行选择一个索引

select * from t force index(index_t);

在 MySQL 中指定了查询索引,为什么没有生效?

  • MySQL 会根据优化器自己选择索引
  • 如果 force index 指定的索引出现在候选索引上,MySQL 就不会在判断扫描的行数,直接使用指定的索引,如果没在候选索引中,即使 force index 指定了索引也是不会生效的

如何优化身份证的索引?

前 6 位代表的是地区,所以很多人的前六位都是相同的,如果我们使用前缀索引为 6 位的话,性能提升也并不是很明显,但如果设置的位数过长,那么占用的磁盘空间也越大,数据页能放下的索引值就越少,搜索效率也越低

  • 使用身份证倒序存储,这样设置前六位的意义就很大了
  • 使用 hash 值,新创建一个字段用于存储身份证的 hash 值

索引的使用场景

  • 对于非常小的表,大部分情况下全表扫描效率更高
  • 中到大型表,索引非常有效
  • 特大型的表,建立和使用索引的代价会随之增大,可以使用分区技术来解决

聚簇索引和非聚簇索引

  • 聚簇索引:InnoDB 的主键索引存储采用聚簇索引,主键和数据存放在一起
  • 非聚簇索引:MyISAM 的主键索引存储采用非聚簇索引,主键和指向数据的指针存放在一起,数据另开空间存储

你写过索引吗?

InnoDB 索引实现

InnoDB使用 B+Tree 作为索引结构

  • 主键索引
    • MyISAM 索引文件和数据文件是分离的,索引文件仅保存数据记录的地址
    • InnoDB 中,表数据文件本身就是按 B+ 树组织的一个索引结构,这棵树的叶节点 data 域保存了完整的数据记录。这个索引的 key 是数据表的主键,因此 InnoDB 表数据文件本身就是主索引
  • InnoDB 的辅助索引:nnoDB 的所有辅助索引都引用主键作为 data 域

MyISAM 索引实现

MyISAM 索引文件和数据文件是分离的,索引文件仅保存数据记录的地址

  • 主键索引:MyISAM 引擎使用 B+Tree 作为索引结构,叶节点的data 域存放的是数据记录的地址
  • 辅助索引:在 MyISAM 中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求 key 是唯一的,而辅助索引的 key 可以重复

🌟InnoDB 聚簇索引:

  • 主键索引树,根结点存的是主键 id 和对应的数据
  • 辅助索引树,根结点存的是辅助索引和对应的主键索引,因此需要根据主键到主键索引树上在遍历一次得到对应的数据

🌟MyISAM 非聚簇索引:

  • 主键索引树,根结点存的是主键到数据地址的映射
  • 辅助索引树,根结点存的是辅助索引到数据地址的映射,也可以直接得到数据,不需要回表

主键索引是聚集索引还是非聚集索引?

在 InnoDB 下主键索引是聚集索引
在 MyISAM 下主键索引是非聚集索引

MyISAM 索引实现?

MyISAM 存储引擎使用 B+Tree 作为索引结构,叶节点的 data 域存放的是数据记录的地址

MyISAM 索引与 InnoDB 索引的区别?

  • InnoDB 索引是聚簇索引,MyISAM 索引是非聚簇索引
  • InnoDB 的主键索引的叶子节点存储着索引和行数据,因此主键索引非常高效
  • MyISAM 索引的叶子节点存储的是行数据地址,需要根据地址访问对应的地址才能得到数据
  • InnoDB 非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效

简单说一说 drop、delete 与 truncate 的区别

  • drop 用于删除数据库对象,操作不可逆
  • delete 用于删除满足条件的行,可以带条件,操作可逆
  • truncate 用于从表中删除所有行,但保留表的结构,操作不可逆

delete、truncate 和 drop 分别在什么场景之下使用?

  • 想删除部分数据行时候,用 delete,并且带上 where 子句
  • 保留表而删除所有数据的时候用 truncate
  • 不再需要一张表的时候,用 drop

⭐为什么 B+Tree 比 B-Tree 更适合实际应用中操作系统的文件索引和数据库索引?

  • 范围查询和顺序访问效率高:B+ 树的叶子节点形成有序链表,使得范围查询和顺序访问非常高效
  • 更少的磁盘 I/O 操作:B+ 树的非叶子节点只存储索引信息,而数据都存储在叶子节点中,在进行索引搜索时,更多的数据能够在一个页中找到,从而减少磁盘读取
  • 更稳定的高度:B+ 树的高度相对较低,B 树的高度会随着数据量的增加而增加,可能导致更多的磁盘 I/O 操作

⭐Hash 索引和 B+ 树有什么区别或者说优劣呢?

  • Hash 索引进行等值查询更快,但是无法进行范围查询
  • Hash 索引不支持使用索引进行排序
  • Hash 索引不支持模糊查询
  • Hash 索引需要回表查询数据,而 B+ 树在符合聚簇索引和覆盖索引的时候可以只通过索引完成查询
  • Hash 索引虽然在等值查询上较快,但是不稳定,可能发生哈希碰撞,而 B+ 树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低

非聚簇索引一定会回表查询吗?

如果联合索引就可以实现索引覆盖,就不需要回表查询

创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?

MySQL 提供了 explain 命令来查看语句的执行计划


秋招后端开发面试题系列目录
一、Java
1.1 Java基础上
1.2 Java基础下
1.3 Java集合
1.4 JavaIO
1.5 Java多线程上
1.6Java多线程下
二、JVM
2.1 JVM底层原理
2.2 垃圾回收器
2.3 垃圾回收算法
2.4 类加载机制
2.5 运行时数据区
三、MySQL
3.1 MySQL基础
3.2 事务
3.3 索引
3.4 锁机制
3.5 MVCC
四、Redis
4.1 Redis基础
4.2 缓存原理
五、中间件
5.1 RabbitMQ
六、Spring开源框架
6.1 Spring
6.2 Spring MVC
6.3 Spring Boot
6.4 MyBatis
七、操作系统
八、计算机网络
九、设计模式
十、微服务架构
十一、Spring Cloud分布式
11.1 分布式基础
11.2 Spring Cloud
11.3 GateWay
11.4 Nacos
11.5 OpenFeign
11.6 Ribbon
十二、算法
十三、项目

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

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

相关文章

JS基础:变量的详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃,大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获取…

基于51单片机NEC协议红外遥控发送接收proteus仿真设计

1.主要功能: 设计一个51单片机红外遥控发射接收proteus仿真设计 功能要求: 1、使用单片机模拟红外遥控器发射红外编码; 2、利用从机接收红外编码,并将编码以16进制显示到数码管上。 需注意仿真中51单片机芯片是兼容的&#x…

Web网页项目实战-----小兔鲜儿项目

本网站是一个电商网站,主要由Html、CSS、JS来完成,实现的功能主要是可以购买产品,展示产品,查看订单等功能,效果如下,如有需要项目代码的可以私信我,或者文章底下评论,我给分享原项目…

爬虫学习(2)破解百度翻译

代码 import requests import jsonif __name__ "__main__":url https://fanyi.baidu.com/sug#post请求参数处理(同get请求一致)headers {"User-Agent": Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, …

【C语言】第一个C程序:hello world

printf简介 printf是C语言提供的库函数,可以在屏幕上打印格式化数据。这里不作展开,只需要知道,如果要打印hello world,就把双引号引起来的"hello world"作为参数传给printf就行了。如果想要在打印后换行,要…

【Linux】冯·诺依曼体系结构

要想谈进程,我们就不能只谈进程,我们如果想搞清楚什么是进程,就要从操作系统讲起。我们现在的不管是Linux或是Windows或是安卓等操作系统,它们都有一个相同点,那就是遵循冯诺依曼体系结构,我们看一下冯诺依…

如何让你的排单更快?

一般我们都喜欢做打板借用快速通道!但是目前快速通道也是共享通道,独立单元格基本不开发。 想要排单更快,想要隔夜打板,我们到底应该怎么做呢? 想要排单更快,说白了就是要提高你的交易速度!一&a…

ai写作工具推荐:如何用AI人工智能进行写作

AI写作工具:提升创作效率的秘密武器 在科技日新月异的今天,人工智能(AI)已经渗透到我们生活的方方面面,包括写作。AI写作工具,就是利用人工智能技术,帮助我们进行文本生成、语言优化等工作的工…

使用C语言实现杨氏矩阵并找出数字

前言 过了五一假期,咋们经过了一个假期的休息,要继续学习了,不能偷懒哦!! 今天让我们来看看如何在一个杨氏矩阵中找出自己想找到的数字。 首先,我们要了解一下杨氏矩阵到底是什么,如果一个矩阵中…

语音识别简介

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

Android关于SparseArray面试题

问题1: 什么是SparseArray&#xff0c;它与HashMap有什么不同&#xff1f; 回答&#xff1a; SparseArray是一个用于优化特定情况下内存使用的数据结构&#xff0c;主要用于替代HashMap<Integer, Object>。SparseArray使用两个数组分别存储键和值&#xff0c;而不是使用…

最原理的一集——Mathtype公式编号设置(Mathtype7.8+Word)

版本 Mathtype7.8Office2019 Word 读完本文你将会 随心所欲&#xff0c;想怎么给公式编号就怎么给公式编号&#xff0c;想从(X.1)开始&#xff0c;就从(X.1)开始大概了解Mathtype公式设置原理给作者点赞 如果你想自己跟着文章做的话 请不要在自己的论文里边直接操作&#…

Docker私有仓库与Harbor部署使用

目录 一、本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ​编辑 3. 运行registry容器 4. Docker容器的重启策略如下 5. 为镜像打标签 6. 上传到私有仓库 7. 列出私有仓库的所有镜像 8. 列出私有仓库的centos镜像有哪些tag 9. 先删…

zTasker v1.88.1一键定时自动化任务

软件介绍 zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具&#xff0c;支持win7-11。其支持超过100种任务类型&#xff0c;50种定时/条件执行方法&#xff0c;而且任务列表可以随意编辑、排列、移动、更改类型&#xff0c;支持任务执行日志&a…

分布式锁之RedissonLock

什么是Redisson&#xff1f; 俗话说他就是看门狗&#xff0c;看门狗机制是一种用于保持Redis连接活跃性的方法&#xff0c;通常用于分布式锁的场景。看门狗的工作原理是&#xff1a;当客户端获取到锁之后&#xff0c;会对Redis中的一个特定的键设置一个有限的过期时间&#xff…

投资海外标的,首选跨境ETF!现在新开佣金低至万0.5!

全球资产配置的利器 随着经济的发展&#xff0c;全球资产配置成为中产阶级的关注方向。目前&#xff0c;全球资产配置的主要渠道包括直接开立境外账户、 QDII 基金、跨境 ETF 等。 现阶段通过跨境 ETF 投资境外股市是最便利、最具效率的方式之一。首先&#xff0c;与直接境外…

4. RedHat认证-进程管理

4. RedHat认证-进程管理 1.进程概念 进程就是正在运行中的程序或者命令 每一个进程都是运行的实体&#xff0c;都有自己的地址空间&#xff0c;并占有一定的资源空间 程序消耗的是磁盘资源、进程消耗的是内存和CPU资源 进程会占用四类资源&#xff08;CPU 、内存、磁盘、网…

会声会影电影片头怎么做 会声会影电影质感调色技巧 会声会影视频制作教程 会声会影下载免费中文版

片头通常通过一系列的图像、音乐和文字等元素来引入电影的主题和氛围。通过视觉和音频的呈现方式&#xff0c;给观众留下深刻的第一印象&#xff0c;为电影的故事铺设基础。这篇文章来学习一下会声会影电影片头怎么做&#xff0c;会声会影电影质感调色技巧。 一、会声会影电影…

力扣每日一题-拆炸弹-2024.5.5

力扣题目&#xff1a;拆炸弹 题目链接: 1652.拆炸弹 题目描述 代码思路 根据代码实现分为k等于0和k不等于0的情况。k等于0很容易处理&#xff0c;而k不等于0时&#xff0c;需要使用滑动窗口的方式来解决。先根据小于0或大于0确定一个窗口&#xff0c;然后移动&#xff0c;获…

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表&#xff08;||&#xff09; 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知…
最新文章