[每周一更]-(第122期):模拟面试|数据库面试思路解析

在这里插入图片描述

10|数据库索引:为什么 MySQL 用 B+ 树而不用 B 树?

  1. 为什么 MySQL 用 B+ 树而不用 B 树?

  2. 什么是覆盖索引?

  3. 什么是聚簇索引/非聚簇索引?

  4. 什么是哈希索引?MySQL InnoDB 引擎怎么创建一个哈希索引?

  5. 什么回表?如何避免回表?

  6. 树的高度和查询性能是什么关系?

  7. 什么是索引最左匹配原则?

  8. 范围查询、Like 之类的查询怎么影响数据库使用索引?

  9. 索引是不是越多越好?

  10. 使用索引有什么代价?

  11. 如何选择合适的索引列?组合索引里面怎么确定列的顺序?状态类的列是否适合作为索引的列?

  12. 为什么 MySQL 使用 B+ 树作为索引的数据结构?为什么不用 B 树?为什么不用红黑树?为什么不用二叉平衡树?为什么不用跳表?

  13. NULL 对索引有什么影响?

  14. 唯一索引是否允许多个NULL 值?

1.为什么 MySQL 用 B+ 树而不用 B 树?

  • B+ 树节点只有索引,而数据存储在叶子节点,并通过指针连接各叶子节点,便于范围查询顺序扫描批量读取。相比之下,B 树的数据分布在所有节点上,范围查询效率较低。
  • MySQL 使用 B+ 树而不是 B 树是因为 B+ 树将所有数据都保存在叶子节点,并将这些节点按顺序连接。这使得 B+ 树适合范围查询顺序扫描,尤其是批量读取时可以减少磁盘 I/O 次数,提高查询性能。B 树则将数据存储在所有节点中,没有叶子节点间的顺序连接,不适合数据库的常见查询模式。

2.什么是覆盖索引?

  • 覆盖索引指的是在查询时,只需要从索引中获取数据而不必回表,因为查询所需的字段已包含在索引中。这可以减少 I/O 操作,提升查询效率。

3.什么是聚簇索引/非聚簇索引?

  • 聚簇索引将数据和索引存储在一起。主键是聚簇索引,通过主键可以快速找到数据行。InnoDB 使用主键作为聚簇索引。
  • 非聚簇索引则将索引和数据分离存储,索引中保存了指向数据行的地址。查询时需要先查找索引,再通过索引指向数据行位置。查询非聚簇索引数据通常需要额外的“回表”操作。

4.什么是哈希索引?MySQL InnoDB 引擎怎么创建一个哈希索引?

  • 哈希索引通过哈希函数来加速等值查询(=)。InnoDB 自适应哈希索引自动为高频查询生成哈希索引,但用户不能手动创建。

5.什么是回表?如何避免回表?

  • 回表指索引未包含查询的所有字段,导致数据库需从表中再次查找完整数据。可以使用覆盖索引或调整查询字段避免回表。

6.树的高度和查询性能是什么关系?

  • 树的高度越低,查询性能越高。因为 B+ 树每层节点包含多个分支(多叉树),一般 2-3 层即可覆盖大数据量,通过较少的磁盘读取完成查询,保证查询高效。

7.什么是索引最左匹配原则?

  • 对于组合索引(如 (a, b, c)),最左匹配原则是优先使用最左边的字段;即 a 可以用索引,a, b 可以用,b, c 则无法单独利用索引。

8.范围查询、Like 之类的查询怎么影响数据库使用索引?

  • 范围查询(<<=>>=BETWEEN)会停止组合索引的最左匹配原则,且范围查询后面的字段无法利用索引。
  • LIKE 查询中,只有前缀匹配(LIKE 'abc%')能用索引,前缀带 %LIKE '%abc')则无法利用索引。

9.索引是不是越多越好?

  • 不是。索引会增加存储开销更新成本,维护过多索引会影响写入和更新性能。因此应根据查询需求合理创建索引。

10.使用索引有什么代价?

  • 索引占用存储空间,更新或插入数据时需要维护索引,导致写入性能下降。

11.如何选择合适的索引列?组合索引里面怎么确定列的顺序?状态类的列是否适合作为索引的列?

  • 根据查询频率过滤性选择列。组合索引中的顺序按选择性高的字段优先排列,确保常用查询能有效利用索引。

  • 状态类列如性别、状态等通常选择性低(例如只有 0 和 1),适合作为复合索引的一部分,但不适合单独作为索引列。

12.为什么 MySQL 使用 B+ 树作为索引的数据结构?为什么不用 B 树?为什么不用红黑树?为什么不用二叉平衡树?为什么不用跳表?

  • B+ 树的叶子节点链表结构有利于范围查询;多叉树的低树高适合存储和查询大数据。
  • 红黑树、二叉平衡树、跳表在大数据场景下的树高和随机 I/O 操作较多,性能不如 B+ 树。

13.NULL 对索引有什么影响?

  • 对于 B+ 树索引,NULL 值可以索引,但可能影响查询优化器的选择,特别在 WHERE 子句有多条件查询时,尽量避免索引字段中存储 NULL 值。

14.唯一索引是否允许多个 NULL 值?

  • 是的,唯一索引允许多个 NULL,因为 NULL 被认为是未知值,两个 NULL 不相等。

11|SQL 优化:如何发现 SQL 中的问题?

  1. 请你解释一下 EXPALIN 命令。
  2. 你有优化过 SQL 吗?具体是怎么优化的?
  3. 你有没有优化过索引?怎么优化的?
  4. 怎么优化 COUNT 查询?
  5. 怎么优化 ORDER BY?
  6. 怎么优化 LIMIT OFFSET 查询?
  7. 为什么要尽量把条件写到 WHERE 而不是写到 HAVING 里面?
  8. 怎么给一张表添加新的索引/修改表结构?如果我的数据量很大呢?
  9. USE INDEX/FORCE INDEX/IGNORE INDEX 有什么效果?

1.请解释一下 EXPLAIN 命令。

  • EXPLAIN 命令可以帮助查看 SQL 语句的执行计划,包括如何选择索引、扫描方式、行数预估等信息。它提供关键字段如 typekeyrowsextra,用于分析查询效率,找出性能瓶颈。

2.你有优化过 SQL 吗?具体是怎么优化的?

  • SQL 优化常见方法包括:创建合适的索引、避免全表扫描、使用覆盖索引、减少子查询、优化 JOIN 语句、将频繁查询的结果缓存等。例如,将子查询替换为 JOIN,或通过覆盖索引来减少回表查询。

3.你有没有优化过索引?怎么优化的?

  • 索引优化包括创建合适的单列索引或组合索引,调整组合索引的列顺序,避免冗余索引,删除不常用或选择性低的索引等。此外,使用 EXPLAIN 查看索引的使用情况,有助于识别低效或无效索引。

4.怎么优化 COUNT 查询?

  • 优化

    COUNT
    

    查询可以使用:

    • 使用统计缓存表来存储记录数。
    • 当仅需检查数据存在时,用 COUNT(1)EXISTS 来替代 COUNT(*)
    • 对于大数据量表,避免用 COUNT 直接查询整个表的行数,可以分表、分区或统计汇总表来提高效率。

5.怎么优化 ORDER BY?

  • ORDER BY 可以通过索引优化,比如对排序字段创建索引。对于大数据量的 ORDER BY,可以使用 LIMIT 限制返回的行数,或借助覆盖索引(比如 ORDER BY 使用索引字段且符合最左前缀原则),避免排序操作耗时过长。

6.怎么优化 LIMIT OFFSET 查询?

  • LIMIT OFFSET 查询性能差的原因是数据库必须扫描和丢弃 OFFSET 前的数据。优化方法包括:
    • 使用覆盖索引优化。
    • JOIN 查询来实现分页,将上次查询的最大 ID 作为起始点,这样避免了大量偏移数据扫描。

7.为什么要尽量把条件写到 WHERE 而不是写到 HAVING 里面?

  • WHERE 在数据聚合前过滤数据,效率更高,而 HAVING 在聚合后进行过滤,适合用于聚合函数的筛选。尽量将不涉及聚合的条件放在 WHERE,减少处理的数据量,加快查询速度。

8.怎么给一张表添加新的索引/修改表结构?如果我的数据量很大呢?

  • 对大表添加索引或修改结构可以使用在线索引创建工具或分批操作,如 Percona 提供的 pt-online-schema-change。避免直接在生产环境大表上添加索引,否则会导致锁表和性能下降。

9.USE INDEX/FORCE INDEX/IGNORE INDEX 有什么效果?

  • USE INDEX 指示查询使用指定索引。
  • FORCE INDEX 强制查询使用指定索引,即使优化器认为其他方式更好。
  • IGNORE INDEX 忽略指定索引,从而让优化器选择其他索引或进行全表扫描。

12|数据库锁:明明有行锁,怎么突然就加了表锁?

  1. 什么是行锁、表锁?什么时候加表锁?怎么避免?
  2. 什么是乐观锁?怎么在 MySQL 里面实现一个乐观锁?
  3. 什么是意向锁?可以举一个例子吗?
  4. 什么是共享锁和排它锁?它们有什么特性?
  5. 什么是两阶段加锁?
  6. 什么是记录锁、间隙锁和临键锁?
  7. RC 级别有间隙锁和临键锁吗?
  8. MySQL 是怎么在 RR 级别下解决幻读的?
  9. 什么情况下会加临键锁?什么情况下会加间隙锁?什么时候加记录锁?
  10. 唯一索引和普通索引会怎么影响锁?
  11. 你遇到过什么死锁问题吗?怎么排查的?最终又是怎么解决的?
  12. 你有没有优化过锁?怎么优化的?

1.什么是行锁、表锁?什么时候加表锁?怎么避免?

  • 行锁:针对单行数据的锁,粒度小,适合并发场景;主要用于 UPDATEDELETE 操作。
  • 表锁:锁住整张表,适合低并发、大批量操作。MySQL 自动加表锁的情况一般包括:当未命中索引时的 DELETEUPDATE 或执行 ALTER 操作。
  • 避免表锁

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

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

相关文章

java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl

用大模型做车牌号识别&#xff0c;最简单高效 在Java场景中&#xff0c;java识别车牌号的需求非常普遍。过去&#xff0c;我们主要依赖OCR等传统方法来实现java识别车牌号&#xff0c;但这些方法的效果往往不稳定。随着技术的发展&#xff0c;现在有了更先进的解决方案——大模…

FreeRTOS学习日志--中断测试实验,以及遇到的问题

目录 实验项目&#xff1a;FreeRTOS 中断测试实验 1、实验目的 2、实验设计 遇到的问题 stm32F103战舰在运行程序后&#xff0c;USB232串口不能接收到信号问题。 从跑马灯FreeRTOS文件基础上移植的FreeRTOS中断无效&#xff0c;而例程中断有效问题。 问题来源与解决方法…

shodan[3](泷羽sec)

声明 学习视频来自B站UP主 泷羽sec,如涉及侵泷羽sec权马上删除文章。 笔记只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 这节课旨在扩大自己在网络安全方面的知识面&#xff0c;了解网络安全领域的见闻&#xff0c;了…

Element UI组件Dialog显示闪动问题【解决方案】

在ElementUI中&#xff0c;el-dialog弹窗确实有时会导致页面出现抖动或闪动的问题。这通常是由于弹窗出现时对页面布局的影响&#xff0c;特别是滚动条的出现或消失&#xff0c;导致了页面的重新布局和渲染。以下是一些解决或缓解这一问题的方法&#xff1a; 解决方案 1. 关闭…

计算机毕业设计Python流量检测可视化 DDos攻击流量检测与可视化分析 SDN web渗透测试系统 网络安全 信息安全 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …

【node模块】深入解读node:assert模块

&#x1f9d1;‍&#x1f4bc; 一名茫茫大海中沉浮的小小程序员&#x1f36c; &#x1f449; 你的一键四连 (关注 点赞收藏评论)是我更新的最大动力❤️&#xff01; &#x1f4d1; 目录 &#x1f53d; 前言1️⃣ 什么是node:assert模块&#xff1f;2️⃣ node:assert模块的核心…

JDBC学习记录

文章目录 一、JDBC简介1.1、 JDBC概念1.2、 JDBC本质1.3、 JDBC好处 二、JDBC快速入门2.1、 编写代码步骤2.2、 代码示例 三、JDBC API详解3.1、DriverManager3.1.1、注册驱动3.1.2、获取连接 3.2、Connection3.2.1、获取执行对象3.2.2、事务管理 3.3、Statement3.3.1、执行DDL…

Linux和,FreeRTOS 任务调度原理,r0-r15寄存器,以及移植freertos(一)

目录、 1、r0-r15寄存器&#xff0c;保护现场&#xff0c;任务切换的原理 2、freertos移植 3、freertos的任务管理。 一、前言 写这篇文章的目的&#xff0c;是之前面试官&#xff0c;刚好问到我&#xff0c;移植FreeRTOS 到mcu&#xff0c;需要做哪些步骤&#xff0c;当时回…

安利一款开源企业级的报表系统SpringReport

SpringReport是一款企业级的报表系统&#xff0c;支持在线设计报表&#xff0c;并绑定动态数据源&#xff0c;无需写代码即可快速生成想要的报表&#xff0c;可以支持excel报表和word报表两种格式&#xff0c;同时还可以支持excel多人协同编辑&#xff0c;后续考虑实现大屏设计…

css:基础

前言 我们之前其实也可以写出一个看起来算是一个网页的网页&#xff0c;为什么我们还要学css&#xff1f; CSS&#xff08;Cascading Style Sheets&#xff09;也叫层叠样式表&#xff0c;是负责美化的&#xff0c;我们之前说html就是一个骨架&#xff0c;css就可以用来美化网…

qt QCompleter详解

1、概述 QCompleter是Qt框架中的一个类&#xff0c;用于为文本输入提供自动完成功能。它可以与Qt的输入控件&#xff08;如QLineEdit、QTextEdit等&#xff09;结合使用&#xff0c;根据用户的输入实时过滤数据源&#xff0c;并在输入控件下方或内部显示补全建议列表。用户可以…

探索 Move 编程语言:智能合约开发的新纪元

目录 引言 一、变量的定义 二、整型 如何在Move中表示小数和负数&#xff1f; 三、运算符 as运算符 布尔型 地址类型 四、什么是包&#xff1f; 五、什么是模块&#xff1f; 六、如何定义方法&#xff1f; 方法访问权限控制 init方法 总结 引言 Move 是一种专为区…

ETLCloud异常问题分析ai功能

在数据处理和集成的过程中&#xff0c;异常问题的发生往往会对业务运营造成显著影响。为了提高ETL&#xff08;提取、转换、加载&#xff09;流程的稳定性与效率&#xff0c;ETLCloud推出了智能异常问题分析AI功能。这一创新工具旨在实时监测数据流动中的潜在异常&#xff0c;自…

遥控器工作核心技术以及传输信号算法详解!

一、遥控器传输信号算法 无线通信技术&#xff1a;无人机遥控器信号传输算法主要基于无线通信技术&#xff0c;通过特定的调制、编码和信号处理技术&#xff0c;将遥控器的操作指令转化为无线电信号&#xff0c;并传输给被控制设备。被控制设备接收到信号后&#xff0c;再将其…

Java中的线程安全问题(如果想知道Java中有关线程安全问题的基本知识,那么只看这一篇就足够了!)

前言&#xff1a;多线程编程已经广泛开始使用&#xff0c;其可以充分利用系统资源来提升效率&#xff0c;但是线程安全问题也随之出现&#xff0c;它直接影响了程序的正确性和稳定性&#xff0c;需要对其进行深入的理解与解决。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解…

基于STM32设计的森林火灾监测系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】研究背景与意义 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 1.5 参考文献 二、部署华为云物联网平台2.1 物联网平台介绍2.2 开通物联网服务…

Webserver(4.9)本地套接字的通信

目录 本地套接字 本地套接字 TCP\UDP实现不同主机、网络通信 本地套接字实现本地的进程间的通信&#xff0c;类似的&#xff0c;一般采用TCP的通信流程 生成套接字文件 #include<arpa/inet.h> #include<stdio.h> #include<stdlib.h> #include<unistd.h&…

第十五届蓝桥杯C/C++B组题解——数字接龙

题目描述 小蓝最近迷上了一款名为《数字接龙》的迷宫游戏&#xff0c;游戏在一个大小为N N 的格子棋盘上展开&#xff0c;其中每一个格子处都有着一个 0 . . . K − 1 之间的整数。游戏规则如下&#xff1a; 从左上角 (0, 0) 处出发&#xff0c;目标是到达右下角 (N − 1, N …

jmeter常用配置元件介绍总结之安装插件

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之安装插件 1.下载插件2.安装插件管理包3.不用插件管理包&#xff0c;直接官网插件下载安装 1.下载插件 jm…