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

每日速记10道MySQL面试题16

其他资料

每日速记10道java面试题01-CSDN博客

每日速记10道java面试题02-CSDN博客

每日速记10道java面试题03-CSDN博客

每日速记10道java面试题04-CSDN博客

每日速记10道java面试题05-CSDN博客

每日速记10道java面试题06-CSDN博客

每日速记10道java面试题07-CSDN博客

每日速记10道java面试题08-CSDN博客

每日速记10道java面试题09-CSDN博客

每日速记10道java面试题10-CSDN博客

每日速记10道java面试题11-CSDN博客

每日速记10道java面试题12-CSDN博客

每日速记10道java面试题13-MySQL篇-CSDN博客

每日速记10道java面试题14-MySQL篇-CSDN博客

每日速记10道java面试题15-MySQL篇-CSDN博客

目录

1.如何在MySQL中避免单点故障?/如何实现读写分离?

2.如何处理MySQL的主从同步延迟?

3.什么是分库分表?分库分表有哪些策略?

4.对数据库分库分表会产生哪些问题?

5.从 MySQL获取数据,是从磁盘读取的吗?

6.MySQL 的 Doublewrite Buffer 是什么?它有什么作用?

7.什么是MySQL的Log buffer?

8.为什么在数据库中都是不推荐使用多表JOIN?

9.MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?

10.MySQL中INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?


1.如何在MySQL中避免单点故障?/如何实现读写分离?

一般会使用主从架构的形式,主数据库+从数据库,读操作只在从数据库中读,写操作往主数据库中写,写完之后再数据同步到从数据库,当主数据库崩了之后,就让从数据库顶上来,读写操作都由从数据库承担,等到主数据库恢复了之后,再将从数据库中的数据同步到主数据库并恢复读写分离。

2.如何处理MySQL的主从同步延迟?

主从同步延迟就是主数据库和从数据库之间的数据同步存在时间差,导致从数据库的数据落后于主数据库。这种延迟是必然存在的,我们无法避免,只能尽量减少。

我能想到比较好的两点方案能够尽量减少主从同步延迟:

第一点就是关键业务的读写都走主数据库,比如用户注册这种比较重要的,这样用户登录进来就不会说账号不存在等问题。

第二点就是设置缓存,在主库写入之后同步到缓存,这样每次查询就先查缓存,缓存没有再查数据库,但是这样又会出现缓存数据不一致的问题。

3.什么是分库分表?分库分表有哪些策略?

什么是分库分表:
将数据进行拆分,放到不同的数据库或者表中


分库分表的类型(策略):水平分表,垂直分表,垂直分库,水平分库
水平分表:将一个表按行进行拆分,分成多行,放到不同的表中(表数据太多了,分一点到其他表)
垂直分表:将一个表按列进行拆分,分成多列,放到不同的表中(表字段太多了,分一点到其他表)
水平分库:不同的库可以具有相同的表结构,只不过每个表里面的数据不一样。
垂直分库:根据功能或者模块进行分库,不同的库存储不同功能或模块的数据,例如用户模块,订单模块,一个搞一个数据库。
水平分库比垂直分库维护起来更加的困难,跨库查询更加的复杂。


为什么要分库分表:业务发展需要,用户以及数据越来越多,单库单表抗不住压力,性能差。分库分表,能够提升性能。

4.对数据库分库分表会产生哪些问题?

1.事务问题。单机事务用不上,得使用分布式事务,而分布式事务大多只能保证数据的最终一致性,所以可能存在数据不一致的场景
2.分库之后,不同库里面的表不能进行ioin查询。一般在应用层进行外理,可以先查出一个表里面的数据,然后根据这些数据做一些处理之后,去查另一个库里面的表,最后进行整合,得到最终结果。还可以在表里面存储一些冗余数据,避免连表查询。
3.主键id重复问题。主键id在分库分表之后,可能存在重复的情况,可以使用雪花算法或者分布式唯一id生成器来生成。
4.order by和count问题。分库分表后,order by,count无法通过数据库直接实现。可以通过应用层代码实现。

这里可能会被问到分布式事务、分布式唯一id生成器等问题

5.从 MySQL获取数据,是从磁盘读取的吗?

并不总是从磁盘读取。mysql8.0之前有查询缓存,会先去查询缓存里面找,如果查询缓存里面有的话,直接返回。8.0的时候移除了查询缓存,因为命中率低,它是以sql作为key,sql语句要相同,而且表不能发生任何变化,才能命中。还有个buffer pool,里面存储了一个一个的数据页,mysql会从buffer pool里面找,如果找到的话就会返回。

6.MySQL 的 Doublewrite Buffer 是什么?它有什么作用?

MySQL 的 Doublewrite Bufer 是 InnoDB存储引擎中的一个机制,用于确保数据的安全性和一致性。它的作用是将数据先写入一个内存缓冲区(双写缓冲区),然后再将其写入数据文件。这种方式可以防止在写入过程中因崩溃或故障导致数据损坏,确保数据的一致性和完整性。

工作原理简述:
写入流程:当事务提交时,InnoDB 首先将数据写入 Doublewrite Buffer,再从该缓冲区将数据写入磁盘的实际数据文件。
恢复机制:在崩溃恢复时,InnoDB 会使用 Doublewrite Buffer 中的数据来修复损坏的页,保证教据不丢失。

延伸→那如果在写入Buffer的时候就出问题了怎么办?

这个问题我没深入研究过,我觉得InnoDB引擎在底层应该会对这次操作进行再次执行并重试写入Buffer中。

7.什么是MySQL的Log buffer?

详情请跳转我的另一篇文章:MySQL数据表中的InnoDB引擎原理(存储结构+架构+事务原理+MVCC)_mysql innodb存储引擎实现原理-CSDN博客

8.为什么在数据库中都是不推荐使用多表JOIN?

多表 JOIN 可能导致查询性能下降,尤其是在处理大数据集时,JOIN 操作的计算复杂度会显著增加,需要进行大量的数据扫描和匹配,增加了内存和CPU的消耗,导致响应时间变长。数据量小倒数据库往往是我们系统的弱点,很多情况下性能瓶颈都在数据库,因此我们需要尽量避免把压力放在数据库上。

如果实在要JOIN,尽量值JOIN两张表,三表以上不JOIN,太耗性能了。JOIN的时候尽量小表做驱动表,因为驱动表要全表扫描,被驱动表走索引,整体复杂度是A+2log2B*A(A为驱动表,B为被驱动表),所以尽量让A尽量小。

9.MySQL 中 DELETE、DROP 和 TRUNCATE 的区别是什么?

1.Delete 用于删除行数据,但保留表结构和相关的对象。
2.Drop 用于完全删除数据库表,包括数据和结构。
3.Truncate只删除数据,不会删除表结构和索引等其他结构。

10.MySQL中INNER JOIN、LEFT JOIN 和 RIGHT JOIN 的区别是什么?

inner join 内连接:内连接就是返回两张表都关联上的数据
left join 左连接:返回时保留左表的数据,右表关联不上的会显示null值
right join 右连接:返回时保留右表的数据,左表关联不上的会显示null值

http://www.lryc.cn/news/498804.html

相关文章:

  • 云计算考试题
  • 无人机理论考试合格证书获取
  • AcWing 3496. 特殊年份
  • YOLOv8模型改进 第二十讲 添加三重注意力机制Triplet Attention 提升小目标/遮挡目标
  • Linux絮絮叨(三) Ubuntu桌面版添加中文拼音输入法
  • Ungoogled Chromium127编译指南 Windows篇 - 安装Visual Studio 2022(六)
  • Kubernetes(K8s)
  • 证明切平面过定点的曲面是锥面
  • python中数组怎么转换为字符串
  • Linux 查看运行了哪些服务
  • WPS EXCEL 使用 WPS宏编辑器 写32位十六进制数据转换为浮点小数的公式。
  • SpringMVC ——(1)
  • 嵌入式中防linux的通用MCU系统
  • Windows电脑伪关机(快速启动模式),怎么真关机
  • 远程修改ESXi 6.7管理IP地址
  • DICOM医学影象应用篇——多平面重建(MPR)在DICOM医学影像中的应用详解
  • chromedriver.exe编译
  • CVPR和其他2024顶会论文阅读(资源整理【1】)
  • 封闭式论文写作--全面掌握ChatGPT-4o的写作技能,掌握提示词使用技巧、文献检索与分析方法,帮助您选定研究方向,提炼学术论文题目
  • ThinkPad X250在 FreeBSD xfce4下小红点不能用、触摸板不能用以及键盘上下左右变成其它键
  • PowerShell install 一键部署postgres17
  • k8s的数据库etcd报 etcdserver: mvcc: database space exceeded的处理办法
  • MySQL——buffer poll
  • 使用GO--Swagger生成文档
  • Pac4j 学习笔记
  • 什么?RayLink远程控制软件支持企业IT应用!
  • LeetCode Hot100 51~60
  • docker 启动 redis 同时设置密码,关机后会自动重启
  • 3D Gaussian Splatting代码详解(一):模型训练、数据加载
  • docker部署RustDesk自建服务器