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

面试数据库八股文十问十答第五期

面试数据库八股文十问十答第五期

作者:程序员小白条,个人博客

1)介绍一下 MySQL8 的新特性

  • Window Functions:提供了对查询结果进行窗口化处理的功能,例如使用ROW_NUMBER()进行分页。
  • Common Table Expressions (CTE):支持 WITH 语法,允许在查询中使用带有别名的临时结果集。
  • JSON enhancements:支持 JSON 聚合函数、更多的 JSON 操作符和 JSON 路径表达式。
  • Spatial Reference System:引入了空间参考系统,以支持地理空间数据类型。
  • Invisible Indexes:允许创建不会影响查询计划的不可见索引,有助于在不影响性能的情况下测试新的索引。
  • Resource Groups:允许将用户分组,并为每个组分配特定的资源。
  • MySQL Document Store:将 MySQL 与 NoSQL 功能相结合,支持以 JSON 格式存储和查询文档数据。

2)MySQL 的索引有几种类型?

  • B-Tree 索引:默认的索引类型,适用于等值查询和范围查询。
  • 哈希索引:适用于精确查找,不支持范围查询,通常用于内存表。
  • 全文索引:用于全文搜索,例如FULLTEXT索引。
  • 空间索引:用于处理空间数据,例如地理空间数据类型的SPATIAL索引。

3)MySQL 中的默认索引是什么?

在 MySQL 中,主键列(Primary Key)和唯一约束列(Unique Key)会默认创建 B-Tree 索引,以保证数据的唯一性和快速检索。

4)MySQL 中有哪些锁?

  • 共享锁(Shared Lock):多个事务可以同时持有共享锁,用于读操作,不阻塞其他事务的共享锁。
  • 排他锁(Exclusive Lock):事务独占资源的锁,用于写操作,会阻塞其他事务的任何锁。

5)MySQL 中什么时候使用表锁,什么时候使用行锁?

  • 表锁(Table Lock):适用于大批量的数据操作,如表结构变更,全表查询等。表锁对并发性影响较大,因为它会锁住整个表,其他事务无法同时操作。
  • 行锁(Row Lock):适用于只涉及少量数据的操作,如更新或删除单行记录。行锁对并发性的影响较小,因为只锁住需要操作的行,其他事务仍可以同时操作其他行。

选择使用表锁还是行锁取决于具体的业务需求和并发访问模式。表锁可能导致性能瓶颈,因此在高并发环境下更倾向于使用行锁。

6)介绍MySQL中锁、索引、事务之间的联系

  • 锁:MySQL中的锁机制用于控制对数据的访问,以确保并发事务之间的数据一致性。锁可以是共享锁或排他锁,用于控制读写操作的并发性。
  • 索引:索引是一种数据结构,用于加速对数据库表中数据的检索。通过使用索引,可以降低查询的时间复杂度,提高数据库的性能。
  • 事务:事务是一系列数据库操作的单元,要么全部执行成功,要么全部回滚。事务的隔离性和一致性要求使用锁来确保事务的执行不受并发操作的影响。

在并发操作中,锁用于控制事务对数据的访问,而索引用于加速对数据的检索。事务通过锁来保证数据的一致性和隔离性,而索引可以减少锁的竞争,提高并发性能。

7)MySQL的架构讲一下?

MySQL的架构主要包括以下组件:

  • 连接池和线程处理:处理客户端连接请求,并使用线程池进行管理。
  • 查询解析和优化器:解析SQL查询语句,生成查询计划,进行优化以提高执行效率。
  • 存储引擎:负责实际的数据存储和检索工作。MySQL支持多种存储引擎,如InnoDB、MyISAM等。
  • 缓存和缓存管理:使用缓存来提高数据的访问速度,通过缓存管理来优化内存的使用。
  • 日志记录:记录数据库的操作日志,包括事务日志和错误日志,以确保数据的一致性和可靠性。
  • 连接管理和安全性:管理用户连接,并提供安全机制,包括用户认证和权限管理。

8)MySQL怎么去实现分布式锁呢?

  • 基于表的实现:创建一个专门用于存储锁信息的表,通过插入、更新、删除记录来控制分布式锁。
  • 基于缓存的实现:使用分布式缓存工具如Redis,利用其原子性操作来实现分布式锁。
  • 基于ZooKeeper等协调服务:利用分布式协调服务实现分布式锁,通过在协调服务中创建临时节点来控制锁的释放与获取。

9)介绍一下b+树的数据结构

  • B+树是一种自平衡树,用于索引结构。它与B树相似,但在叶子节点上存储了所有的关键字,且叶子节点之间使用链表相连。
  • 所有关键字按顺序存储在叶子节点上,内部节点只存储索引,而不存储实际的关键字数据。
  • B+树的特点包括有序性、高度平衡、适合范围查询等。在数据库中常被用作索引结构。

10)(a,b,c)联合索引 where a = ‘xxx’ b is null c = 'xxx’怎么走索引

  • 对于这个联合索引 (a, b, c),在查询条件中使用了a和c,而b为NULL,MySQL可以利用这个联合索引进行范围查询。
  • 索引的有序性可以让数据库快速定位到 a=‘xxx’ 的记录,然后在该记录的基础上进行 c=‘xxx’ 的过滤,由于b是NULL,不会影响索引的使用。
  • 总体来说,这个查询条件可以有效地利用联合索引,提高查询性能。但要注意,实际的性能还受到表的大小、数据分布等因素的影响。

项目

项目适用人群:做课设、毕设的小伙伴、只学习了后端(或者前端),但想要自己做项目写在简历上,这三个项目可以作为拓展点。

前后端项目 Gitee & Github 累计 3000+ Star,10W+浏览量!⭐点赞⭐收藏⭐不迷路!⭐

智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend

智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend

GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem

http://www.cnnetsun.cn/news/116504.html

相关文章:

  • Steam游戏挂机神器:3分钟学会自动刷时长和交易卡
  • F5 Big-IP by SNMP.硬件负载均衡
  • 公有云省钱 + 稳业务秘诀!自动伸缩 1 节课上手,资源不浪费、高峰不卡顿~(4)
  • EmotiVoice WebSocket接口设计与调用示例
  • 基于51单片机的颜色识别报站系统设计
  • 3个关键策略解决Cocos事件响应混乱问题
  • DuckDB C++集成:如何在嵌入式项目中实现高性能数据分析?
  • 移动端集成EmotiVoice:Android/iOS兼容方案
  • Feishin音乐播放器完全手册:打造个性化自托管音乐云
  • Launcher3 启动器:打造纯净原生 Android 体验的完整指南
  • 同花顺问财数据获取:Python自动化工具的完整使用指南
  • 【完整指南】快速掌握ComfyUI-SeedVR2视频超分模块
  • 大模型重塑知识图谱构建全面解析LLMs驱动的知识工程新范式!
  • 云存储安全防线:OSS防御体系构建与实战策略
  • SUNNOD喷墨打印机防堵头测试色卡:专业维护解决方案
  • 通义千问3-VL-Plus - 界面交互(本地图片)
  • 使用C#代码更改 PowerPoint 幻灯片大小
  • 基于单片机的智能电动车设计
  • Shipit自动化部署终极指南:从零到精通完整教程
  • Freedom Chat | 这款美国通讯应用泄露了所有人的电话号码
  • JMeter 二次开发环境准备详解
  • OkHttp跨平台网络开发实战指南:从架构原理到性能优化
  • 2025有哪些免费降ai率工具?有哪些免费AI率查重工具?
  • 大模型应用开发-Langchain(V1-最新版)-上
  • 知网AI率降到3%,还免费降AI500字,这个降AI工具真好!
  • 终极性能释放:AMD APU隐藏的30%算力这样激活
  • FusionCompute 8.0完整资源获取指南:从零开始搭建虚拟化实验环境
  • The Mirror版本控制系统终极指南:实现高效协作与智能冲突解决
  • 【扫盲】sql代码里那个“傻鸟” 1=1 到底是个啥?为什么 MyBatis 不用写?
  • 熟人推荐模式年入10亿的秘密