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

尚硅谷Java面试题第四季-MySQL面试题

1.如何建立复合索引,一般加在哪些字段?建索引的理论依据或者经验

在这里插入图片描述
在这里插入图片描述

2.Innodb的行锁到底锁了什么?

在这里插入图片描述
在这里插入图片描述
结论:
InnoDB的行锁,是通过锁住索引来实现的,如果加锁查询的时候没有使用到索引,会将整个聚簇索引都锁住,相当于锁表了。

命中索引->锁行,没有命中->锁表。

3.什么是回表?

答案:通过辅助索引(二级索引)拿到主键后再回到主键索引查询的过程,就叫做「回表」。

B+树检索原理

由于B+树的非叶子节点只存储键值信息,假设每个磁盘块能存储4个键值及指针信息,则变成B+树后其结构如下图所示:
在这里插入图片描述
B+树中,所有数据记录节点都是按照键值大小顺序存放在同一层的叶子节点上,而非叶子节点上只存储key值信息,这样可以大大加大每个节点存储的key值数量,降低B+树的高度。

B+树算法: 通过继承了B树的特征,B+树相比B树,新增叶子节点与非叶子节点关系。

叶子节点中包含了键值和数据,根节点和枝节点中,只是包含键值和子节点引用,不包含数据。

通过非叶子节点查询叶子节点获取对应的数据,所有相邻的叶子节点包含非叶子节点使用链表进行结合,叶子节点是顺序排序并且相邻节点有顺序引用的关系。

总结

回表是指数据库根据索引(非主键)找到了指定的记录所在行后,还需要根据主键再次到数据块里获取数据的操作。这个过程在MySQL中可能涉及两次查询:首先通过索引扫描找到满足条件的记录的主键值,然后再通过主键值去主键索引中查找完整的行记录。

具体来说,在InnoDB存储引擎中,当通过非聚簇索引查询数据时,由于索引中不包含完整的行数据,因此需要根据索引中找到的主键值再去聚簇索引中查找完整的行数据,这个过程就是回表。

然而,回表操作虽然提供了更全面的数据信息,但也带来了一些问题和局限性。首先,回表操作需要访问两次索引,增加了IO开销和CPU消耗,对查询性能有一定的影响。特别是在高并发、大数据量的情况下,回表可能成为性能瓶颈。其次,由于回表操作是基于物理地址来获取数据,如果在回表过程中发生了数据修改(如DELETE、UPDATE),则可能会读取到不一致或错误的数据。

因此,在设计索引时,需要结合具体的业务场景和查询需求,选择合适的索引策略,以尽量减少回表的次数和影响,提高查询效率和性能。例如,可以通过使用覆盖索引来避免回表操作,覆盖索引是指索引包含了查询所需的所有字段的值,因此可以直接通过索引获取查询结果,而无需再去访问数据表。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 关于武汉芯景科技有限公司的多协议收发芯片XJ526(第二篇RS422模式)开发指南(兼容SP526)
  • Java:循环练习
  • 开发指南054-选择人员
  • day35
  • LUOGU P2048 [NOI2010] 超级钢琴(贪心+堆)
  • vue elementPlus中使用dayjs
  • 《Docker:实现开发环境一致性与高效部署的利器》
  • ArcGIS如何将投影坐标系转回为地理坐标系
  • SpringBoot集成kafka-生产者发送消息
  • 【前端面试】浏览器原理解读
  • Scratch深潜:解锁递归与分治算法的编程之门
  • 【补充篇】AUTOSAR多核OS介绍(下)
  • JavaScript基础知识(六)
  • Python案例 | Kriging预测钢筋混凝土梁长期挠度
  • C++ 设计模式(1. 单例模式)
  • #Java异常处理
  • [LeetCode] Wiggle Sort
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Apache Spark Streaming 使用实例
  • C# 免费离线人脸识别 2.0 Demo
  • gf框架之分页模块(五) - 自定义分页
  • Transformer-XL: Unleashing the Potential of Attention Models
  • underscore源码剖析之整体架构
  • vagrant 添加本地 box 安装 laravel homestead
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 飞驰在Mesos的涡轮引擎上
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 推荐一个React的管理后台框架
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #ifdef 的技巧用法
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (二)原生js案例之数码时钟计时
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (十三)Flask之特殊装饰器详解
  • (学习日记)2024.02.29:UCOSIII第二节
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转载)虚函数剖析
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .a文件和.so文件
  • .NET 回调、接口回调、 委托
  • .NET程序员迈向卓越的必由之路
  • .net和php怎么连接,php和apache之间如何连接
  • .net通过类组装数据转换为json并且传递给对方接口
  • .net中调用windows performance记录性能信息
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ NOI 2001 ] 食物链
  • [.NET]桃源网络硬盘 v7.4
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]