150道MySQL高频面试题,学完吊打面试官--关于索引的五道大厂面试题,跳槽面试很重要

前言

本专栏为150道MySQL大厂高频面试题讲解分析,这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。
MySQL应用广泛,在多个开发语言中都处于重要地位,所以最好都要掌握MySQL的精华面试题,这也是面试官最喜欢问的,现在面试官在面试的时候更关心的是某个技术点的深度,所以专栏的内容也会从底层开始讲解,本专栏会一直不断的进行更新,欢迎大家一起交流学习。

gongzhonghao【小白的大数据之旅】

一个b+树中大概能存放多少条索引记录?

一个B+树中大概能存放的索引记录数量取决于多个因素,包括B+树的高度、阶数(即每个节点能包含的最大关键字数或子节点数)、以及每个关键字或数据记录的大小等。

  • 真实环境中一个页存放的记录数量是非常大的(默认16KB),假设指针与键值忽略不计(或看做10个字节),数据占 1 kb 的空间:
  • 如果B+树只有1层,也就是只有1个用于存放用户记录的节点,最多能存放 16 条记录。
  • 如果B+树有2层,最多能存放 1600×16=25600 条记录。
  • 如果B+树有3层,最多能存放 1600×1600×16=40960000 条记录。
  • 如果存储千万级别的数据,只需要三层就够了

B+树的非叶子节点不存储用户记录,只存储目录记录,相对B树每个节点可以存储更多的记录,树的高度会更矮胖,IO次数也会更少。

索引记录数量的估算

以一个三层、阶数为4的B+树为例,它能够存放的索引记录数量是相当可观的。具体来说,如果每个节点(包括叶子节点和非叶子节点)都能充分利用其存储空间,并且假设数据记录的大小适中,那么一个这样的B+树可能能够存放数十亿条索引记录。这是一个非常粗略的估算,实际情况会根据具体的数据库实现和配置有所不同。

影响因素

  • B+树的高度:B+树的高度是影响其存储能力的重要因素。高度较低的B+树意味着从根节点到叶子节点的路径较短,因此访问速度较快。但是,随着高度的增加,B+树能够存储的索引记录数量也会显著增加。
  • 阶数(m):阶数m定义了每个节点最多能包含的关键字数或子节点数。阶数越大,每个节点能包含的关键字就越多,从而能够支持的索引记录数量也就越多。
  • 数据记录的大小:数据记录的大小也会影响B+树的存储能力。如果数据记录较大,那么每个节点能存储的关键字数量就会减少,从而限制了B+树的存储能力。相反,如果数据记录较小,那么每个节点能存储的关键字数量就会增加。
  • 磁盘存储单元的大小:磁盘存储数据的最小单元(如扇区、块或页)也会影响B+树的存储能力。较大的存储单元意味着每个节点能包含更多的数据,从而提高了B+树的存储能力。

使用B+树存储的索引crud执行效率如何?

创建(Create)

  • 效率:高。在B+树中,创建新记录通常只需要在最底层的叶子节点新增一条记录。由于新增记录不会改变树的整体结构,因此创建操作的时间复杂度为O(log n),其中n是树的高度。
  • 原因:B+树的叶子节点存储了所有数据的引用,而非叶子节点仅存储键的信息。这种结构使得在新增记录时,可以顺序地将记录写入叶子节点,无需进行复杂的树结构调整。

读取(Read)

  • 效率:高。读取操作通过索引可以快速定位到数据所在的叶子节点,时间复杂度同样为O(log n)。
  • 原因:B+树的有序性和平衡性保证了查找路径的短且稳定。此外,由于所有叶子节点通过链表相连,便于进行范围查找,进一步提高了查询效率。

更新(Update)

  • 效率:相对较低。更新操作可能涉及数据移动,因为需要找到要更新的记录并将其替换为新的记录。如果更新导致节点分裂或合并,还需要调整树的结构。
  • 原因:B+树需要保持平衡性,因此在更新操作时可能需要进行额外的调整工作。此外,如果更新的记录较大,可能还需要考虑节点的存储空间和分裂问题。

删除(Delete)

  • 效率:相对较低。删除操作同样可能涉及数据移动和树结构的调整。特别是当删除操作导致节点下溢时,需要合并相邻节点或向父节点借数据来保持平衡。
  • 原因:与更新操作类似,B+树在删除时需要保持其有序性和平衡性。这可能导致额外的调整工作,从而影响删除操作的效率。

总结

  • 优势:B+树在创建和读取操作上表现出色,时间复杂度低且稳定。其有序性和平衡性使得查找路径短且高效,特别适用于数据库索引等需要频繁查找的场景。
  • 劣势:更新和删除操作可能涉及数据移动和树结构的调整,效率相对较低。特别是在数据频繁变更的场景下,B+树的调整工作可能会成为性能瓶颈。

因此,在使用B+树作为索引数据结构时,应根据业务需求选择适当的索引策略。例如,在需要频繁查找而更新和删除操作较少的场景下,B+树是一个很好的选择。而在数据频繁变更的场景下,可能需要考虑其他更适合的索引结构或优化策略。

什么是自适应哈希索引?

自适应哈希索引(Adaptive Hash Index,AHI)是一种用于快速访问数据库中数据的索引结构,它是InnoDB存储引擎中的一种特性。

定义与原理

自适应哈希索引将索引键值映射到哈希表中,以快速查找记录。InnoDB存储引擎会监控对表上索引页的查询,如果发现某个索引页被频繁访问,InnoDB就会为该索引页建立一个哈希索引。这个哈希索引是基于内存构建的,因此能够提供快速的查找速度。

优点

  • 快速查询:哈希表允许常数时间(O(1))的查找操作,因此自适应哈希索引能够快速地定位记录。
  • 低存储开销:哈希索引通常比B-tree索引更紧凑,因为它们不需要存储额外的指针和元数据。
  • 自动构建:InnoDB存储引擎会自动监控索引页的访问情况,并为频繁访问的索引页构建哈希索引,无需人工干预。

使用场景

自适应哈希索引主要适用于以下场景:

  • 等值查询频繁:如果某个列的值经常被用作等值查询的条件,并且查询频率较高,那么InnoDB存储引擎可能会为该列的值构建自适应哈希索引。
  • 热点数据访问:对于经常被访问的热点数据,自适应哈希索引能够提供更快的查找速度,从而提高查询性能。
  • 内存资源充足:由于自适应哈希索引是基于内存构建的,因此需要足够的内存资源来支持其构建和维护。

限制与注意事项

  • 只能用于等值查询:自适应哈希索引只能用于等值比较(如=、<=>、IN等),对于范围查询、模糊查询等不能使用哈希索引。
  • 占用内存资源:自适应哈希索引会占用InnoDB缓冲池的内存资源,因此需要根据实际负载情况来决定是否启用。
  • 无法人工干预:自适应哈希索引的构建和管理是由InnoDB存储引擎自动完成的,用户无法直接干预其构建过程。
  • LIKE运算符和%通配符的查询不会受益:对于使用LIKE运算符和%通配符的查询,自适应哈希索引无法提供加速效果。

监控与配置

  • 监控自适应哈希索引:可以通过SHOW ENGINE INNODB STATUS命令来监控自适应哈希索引的状态和性能。
  • 配置启用或禁用:可以通过设置innodb_adaptive_hash_index参数来启用或禁用自适应哈希索引。

什么是2-3树 2-3-4树?

多叉树(multiway
tree)允许每个节点可以有更多的数据项和更多的子节点。2-3树,2-3-4树就是多叉树,多叉树通过重新组织节点,减少节点数量,增加分叉,减少树的高度,能对二叉树进行优化。

2-3树

下面2-3树就是一颗多叉树

在这里插入图片描述2-3树具有如下特点:

  • 2-3树的所有叶子节点都在同一层。
  • 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点。
  • 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点。
  • 2-3树是由二节点和三节点构成的树。
  • 对于三节点的子树的值大小仍然遵守 BST 二叉排序树的规则。

在这里插入图片描述

2-3-4树

在这里插入图片描述

为什么官方建议使用自增长主键作为索引?(说一下自增主键和字符串类型主键的区别和影响)

官方建议使用自增长主键作为索引,这主要基于自增长主键在数据库性能和可维护性方面的多重优势。

自增长主键作为索引的优势

性能提升:

自增长主键通常是整数类型,这使得它们在数据库中的存储和索引效率非常高。整数类型的比较和排序速度通常更快,从而提高了查询、插入和更新操作的效率。
自增长主键的值按顺序递增,这有助于减小索引的尺寸。小尺寸的索引更容易缓存,从而进一步提高查询性能。

插入效率:

由于自增长主键的值是按顺序递增的,新的记录总是在表的末尾添加,这不会导致数据页的分裂或数据的重排。这种顺序插入的方式有助于提高插入性能。

避免主键冲突:

自增长主键是唯一的,因此不会出现主键冲突的情况,这有助于保持数据的完整性。

减小碎片化:

自增长主键有助于数据在磁盘上的有序存储,从而减小了碎片化,提高了磁盘读取性能。

容易管理:

自增长主键是数据库自动生成的,不需要应用程序手动分配主键值,这减轻了应用程序的负担。

适用于复制和分片:

在复制和分片环境下,自增长主键有助于数据的一致性和均匀分布。

自增主键与字符串类型主键的区别和影响

存储效率:

自增主键通常是整数类型,占用的存储空间较小。而字符串类型主键占用的存储空间相对较大,这会影响索引的存储效率和查询性能。

索引效率:

整数类型的自增主键在索引时效率更高,因为整数比较和排序的速度通常更快。而字符串类型的主键在索引时需要进行字符串比较,这可能会降低索引效率。

插入性能:

自增主键的顺序插入方式有助于提高插入性能。而字符串类型的主键在插入时可能会导致数据页的分裂或数据的重排,从而降低插入性能。

主键冲突:

自增主键是唯一的,不会出现主键冲突的情况。而字符串类型的主键在生成时如果不注意可能会产生重复值,导致主键冲突。

数据完整性:

自增主键的唯一性有助于保持数据的完整性。而字符串类型的主键如果处理不当可能会导致数据不完整或不一致的情况。

官方建议使用自增长主键作为索引主要是基于其在性能、插入效率、避免主键冲突、减小碎片化和易于管理等方面的优势。相比之下,字符串类型主键在存储效率、索引效率、插入性能和数据完整性方面可能表现较差。因此,在数据库表设计中,如果没有特别的需求,通常建议使用自增长主键作为索引。

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

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

相关文章

在培训班学网络安全有用吗

在当今数字化时代&#xff0c;网络安全问题日益凸显&#xff0c;成为了企业和个人关注的焦点。随着对网络安全人才需求的不断增长&#xff0c;各种网络安全培训班也如雨后春笋般涌现。然而&#xff0c;在培训班学网络安全真的有用吗? 一、网络安全的重要性与挑战 1. 信息时代的…

SQL Server 2008 R2 详细安装教程及错误解决教程

SQL Server 2008 R2 详细安装教程及错误解决教程 文章目录 SQL Server 2008 R2 详细安装教程及错误解决教程1.装载或解压ISO文件2. 运行setup程序3. 下载并安装.NET Framework3.54.选择全新安装或向现有安装添加功能5.输入秘钥同意条款6.选择安装类型7.设置角色8.功能选择9.实例…

HT32201 2x15W+30W免电感2.1声道D类音频功放

1 特性 ● 输出功率 2x12W24W(VDD14.5V, RL2x8Ω4Ω&#xff0c;THDN1%) 2x15W30W(VDD14.5V,RL2x8Ω4Ω&#xff0c;THDN10%) 2x8W16W(VDD12V,RL2x8Ω4Ω,THDN1%) 2x10W20W(VDD12V,RL2x8Ω4Ω&#xff0c;THDN10%) ● 单电源系统&#xff0c;4.5V-18V宽电压输入范围 ● 超过90…

Unreal5从入门到精通之如何在指定的显示器上运行UE程序

前言 我们有一个设备,是一个带双显示器的机柜,主显示器是一个小竖屏,可以触屏操作,大显示器是一个普通的横屏显示器。我们用这个机柜的原因就是可以摆脱鼠标和键盘,直接使用触屏操作,又可以在大屏观看,非常适合用于教学。 然后我们为这款机柜做了很多个VR项目,包括Uni…

揭秘全向轮运动学:机动艺术与上下位机通信的智慧桥梁

✨✨ Rqtz 个人主页 : 点击✨✨ &#x1f308;Qt系列专栏:点击 &#x1f388;Qt智能车上位机专栏: 点击&#x1f388; 本篇文章介绍的是有关于全向轮运动学分析&#xff0c;单片机与上位机通信C代码以及ROS里程计解算的内容。 目录 大纲 ROS&#xff08;机器人操作系统&…

动态规划理论基础和习题【力扣】【算法学习day.22】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

HTTP、WebSocket、gRPC 或 WebRTC:各种协议的区别

在为您的应用程序选择通信协议时&#xff0c;有很多不同的选择。 本文将了解四种流行的解决方案&#xff1a;HTTP、WebSocket、gRPC 和 WebRTC。 我们将通过深入学习其背后原理、最佳用途及其优缺点来探索每个协议。 通信方式在不断改进&#xff1a;变得更快、更方便、更可靠&…

大模型微调技术 --> LoRA 系列之 QLoRA (省资源能手)

QLoRA 1.摘要 作者提出了QLoRA&#xff0c;一种有效的微调方法&#xff0c;可以减少内存使用&#xff0c;足以在单个48 GB GPU上微调 65B 参数模型&#xff0c;同时保留完整的 16位 微调任务性能。 QLoRA 通过冻结的4位量化预训练语言模型将梯度反向传播到低秩适配器&#x…

一种ESB的设计

系统架构 ESB包括&#xff1a; ESB总控服务、业务应用集群、业务消息WEB服务、业务消息日志服务、运维管理平台、业务设计器。如下图所示 ESB总控服务 ESB总控服务承载了各项业务的运维和管理。主要包括&#xff1a; 业务流程的管理ESB内部不同模块间的通讯ESB系统设置和管理…

06 网络编程基础

目录 1.通信三要素 1. IP地址&#xff08;Internet Protocol Address&#xff09; 2. 端口号&#xff08;Port Number&#xff09; 3. 协议&#xff08;Protocol&#xff09; 2.TCP与UDP协议 三次握手&#xff08;Three-Way Handshake&#xff09; 四次挥手&#xff08;…

使用sealos部署的集群在部署metrics-server时日志x509

1、下载文件并进行部署 wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml2、进行部署 kubectl apply -f components.yaml3、发现问题 pod容器已经启动但是健康检查没有通过 kubectl get pod -n kube-system metrics-server…

定海 - 利用Coraza引擎开发一个防火墙

1. 介绍: Coraza有大量的内置安全规则,包括 OWASP Top 10&#xff0c;同时将错误警报降至最低。CRS保护免受许多常见攻击类别的攻击&#xff0c;包括SQL注入&#xff08;SQLi&#xff09;、跨站点脚本&#xff08;XSS&#xff09;、PHP和Java代码注入、HTTPoxy、Shellshock、脚…

【Linux】冯诺依曼体系、再谈操作系统

目录 一、冯诺依曼体系结构&#xff1a; 1、产生&#xff1a; 2、介绍&#xff1a; 二、再谈操作系统&#xff1a; 1、为什么要管理软硬件资源&#xff1a; 2、操作系统如何进行管理&#xff1a; 3、库函数&#xff1a; 4、学习操作系统的意义&#xff1a; 一、冯诺依曼…

bat批量处理脚本细节研究

文章目录 bat批处理脚本&#xff08;框架&#xff09;set变量设置基本语法显示环境变量 自定义环境变量临时环境变量和永久环境变量特殊环境变量和系统默认环境变量set命令利用选项的其他应用 !与%解析变量的区别/为什么使用setlocal enabledelayedexpansion区别%的规则!使用 %…

ReactPress系列—Next.js 的动态路由使用介绍

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;感谢Star。 Next.js 的动态路由使用介绍 Next.js 是一个流行的 React 框架&#xff0c;支持服务端渲染、静态站点生成和动态路由等功能&#xff0c;极大地简化…

计算机的发展史

计算机的发展史是一个跨越多个世纪的过程&#xff0c;从最早的机械计算设备到如今的高性能、智能化计算机。以下是计算机发展史的简要概述&#xff0c;按重要的技术进步和里程碑进行归类&#xff1a; 1. 早期的计算工具&#xff08;公元前3000年—17世纪&#xff09; 计算机的…

基于STM32的实时时钟(RTC)教学

引言 实时时钟&#xff08;RTC&#xff09;是微控制器中的一种重要功能&#xff0c;能够持续跟踪当前时间和日期。在许多应用中&#xff0c;RTC用于记录时间戳、定时操作等。本文将指导您如何使用STM32开发板实现RTC功能&#xff0c;通过示例代码实现当前时间的读取和显示。 环…

Python | Leetcode Python题解之第537题复数乘法

题目&#xff1a; 题解&#xff1a; class Solution:def complexNumberMultiply(self, num1: str, num2: str) -> str:real1, imag1 map(int, num1[:-1].split())real2, imag2 map(int, num2[:-1].split())return f{real1 * real2 - imag1 * imag2}{real1 * imag2 imag1…

CoD-MIL: 基于诊断链提示的多实例学习用于全切片图像分类|文献速递-基于深度学习的病灶分割与数据超分辨率

Title 题目 CoD-MIL: Chain-of-Diagnosis Prompting Multiple Instance Learning for Whole Slide Image Classification CoD-MIL: 基于诊断链提示的多实例学习用于全切片图像分类 01 文献速递介绍 病理检查被广泛视为肿瘤诊断的金标准&#xff0c;因为它为治疗决策和患者…

232转485模块测试

概述 常用的PLC一般会有两个左右的232口&#xff0c;以及两个左右的485口&#xff0c;CAN口等&#xff0c;但是PLC一般控制的设备可能会有很多&#xff0c;会超出通讯口的数量&#xff0c;此时我们一般会采用一个口接多个设备&#xff0c;这种情况下要注意干扰等因素&#xff0…