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

news2025/2/25 16:51:29

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

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

相信看了本文后,对你的面试是有一定帮助的!

⭐点赞⭐收藏⭐不迷路!⭐

1.MySQL的主从复制

  • MySQL的主从复制是什么?
  • MySQL主从复制是一种常见的数据库复制技术,它的目的是将主数据库的更新同步到从数据库中,从而实现数据的备份和负载均衡。
  • 原理:MySQL主从复制采用了基于日志的复制机制,即主库将更新操作记录在二进制日志中,从库通过读取主库的二进制日志来复制主库的更新操作。从库接收到主库的更新操作后,会将这些操作应用到自己的数据库中,从而实现数据的同步。
  • 主从复制的作用
  • 作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
  • 业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的评率,提高单个机器的I/O性能。
  • 读写分离使数据库能支持更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
  • 怎么实现主从复制?
  • (1)创建主库和从库。(2)在主库上开启二进制日志,并设置唯一的 server-id。(3)在从库上设置唯一的 server-id,并将主库的二进制日志同步到从库中。(4)在从库上创建复制账户,并授权给主库的 IP 地址。(5)在从库上启动复制进程,连接到主库,并开始复制数据。(6)在主库上进行数据更新操作,更新的操作将被记录在二进制日志中。(7)从库接收到主库的更新操作后,将这些操作应用到自己的数据库中,从而实现数据的同步。
  • 注意点: 由于主从复制是异步的,从库可能会有一定的延迟,需要根据具体的应用场景进行调整和优化。

2.MySQL存储引擎,MyISAM和InnoDB的特点和使用场景

MySQL常见存储引擎:

InnoDB是MySQL的默认存储引擎,支持ACID事务,具有高并发性、可靠性和稳定性。InnoDB采用MVCC(多版本并发控制)来实现高并发的读写操作,支持行级锁定,可以提高并发性能。InnoDB也支持外键、回滚等特性,适合于事务性应用场景,例如电子商务、金融等。

  1. MyISAM是一种简单、高效的存储引擎,不支持事务和行级锁定,但具有快速的读取和写入速度,适合于大量查询和少量更新的场景,例如博客、新闻网站等。
  2. MEMORY存储引擎可以将数据存储在内存中,具有快速的读取和写入速度,但是数据存储在内存中,容易丢失。MEMORY存储引擎适合于对数据进行快速计算和缓存数据的场景。
  3. NDB Cluster存储引擎是一种分布式存储引擎,具有高可用性和高可伸缩性,可以实现多台服务器之间的数据共享和负载均衡,适合于大型高并发的应用场景,例如电信、游戏等。
  4. CSV存储引擎将数据存储在文本文件中,具有快速的导入和导出数据的特点,但是不支持事务和索引,适合于对数据进行批量处理的场景。
  5. ARCHIVE存储引擎是一种存档式存储引擎,可以实现快速的数据压缩和解压缩,适合于存储历史数据或备份数据的场景。InnoDB和MyISAM区别1).MyISAM是非事务安全型的,而InnoDB是事务安全型的。2).MyISAM锁的粒度是表级,而InnoDB支持行级锁定。3).MyISAM支持全文类型索引,而InnoDB不支持全文索引。4).MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。5).MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。6).InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。

3.聚簇索引和非聚簇索引

聚簇索引

聚簇索引又称为主索引,是一种物理排序的索引,它决定了表中数据的物理存储顺序。聚簇索引的叶子节点存储的是数据本身,因此聚簇索引可以快速地定位到数据行。由于聚簇索引决定了数据的物理存储顺序,因此一个表只能有一个聚簇索引。

非聚簇索引

非聚簇索引又称为辅助索引,不影响表中数据的物理存储顺序。非聚簇索引的叶子节点存储的是索引键值以及指向数据行的指针,因此需要通过索引键值查找数据行。一个表可以有多个非聚簇索引。

聚簇索引和非聚簇索引的使用场景不同,需要根据具体的应用场景来选择。一般来说,如果需要经常进行范围查询或聚合计算,那么就应该使用聚簇索引。如果需要经常用于查询和排序,那么就应该使用非聚簇索引。

需要注意的是,虽然聚簇索引的查询速度快,但是由于每次插入和更新数据都会改变数据的物理存储顺序,因此会影响性能。在使用聚簇索引时,需要避免频繁的插入和更新操作。同时,在选择索引类型时,需要根据具体的应用场景和需求来综合考虑。

4.b树和b+树的区别

  • 在B树中,你可以将键和值存放在内部节点和叶子节点;但在B+树中,内部节点都是键,没有值,叶子节点同时存放键和值。

  • B+树的叶子节点有一条链相连,而B树的叶子节点各自独立。

  • 由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。

  • B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。

  • 但是B树也有优点,其优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

  • B 树:优点:

    • 快速的查找和插入操作;
    • 适合大数据量、高并发的场景;
    • 内部数据结构稳定,能够保证树形结构的可靠性。
  • 缺点:

    • 存储容量较大,需要更多的存储空间;
    • 树的高度较高,会导致查询效率降低。
  • 使用场景:

    • 对于需要快速查找、插入操作的大数据量场景,如搜索引擎、数据挖掘等;
    • 需要支持并发访问的场景,如金融交易系统等。
  • B+树:优点:

    • 相对于 B 树,B+树的存储容量较小,更节省存储空间;
    • 查询效率更高,更适合大数据量、低并发的场景;
    • 内部数据结构更加稳定,能够保证树形结构的可靠性。
  • 缺点:

    • 查找和插入操作的性能比 B 树略低;
    • 树的高度较高,会导致查询效率降低。
  • 使用场景:

    • 对于需要高效查询、少量插入和删除操作的大数据量场景,如电子商务网站等;
    • 需要支持并发访问的场景,如金融交易系统等。

5.Innodb引擎执行update语句的执行流程?

1.查询解析和优化:当你执行UPDATE语句时,MySQL首先会对查询进行解析,以确定要更新的表和相应的行。然后,它会进行优化,以确定如何执行更新操作。

2.事务的启动:如果你的UPDATE语句没有包含在一个显式的事务中,InnoDB会自动启动一个事务。事务是用来维护数据的一致性和隔离性的机制。

3.锁定行:InnoDB使用行级锁定来确保并发事务不会互相干扰。在执行UPDATE语句时,InnoDB会锁定要更新的行,以防止其他事务同时修改这些行。这可以是排它锁(X锁)或共享锁(S锁),具体取决于事务的隔离级别和行的当前锁定状态。

4.执行更新操作:InnoDB会根据UPDATE语句的条件更新符合条件的行。更新操作将修改数据行中的值。

5.写入redo日志:InnoDB会将更新操作写入事务的redo日志中,以确保数据持久性。这允许数据库在崩溃后恢复到一致的状态。

6.写入binlog日志: 在binlog记录一下逻辑日志,对哪个数据页的哪条数据进行了什么修改。

7.提交事务:如果UPDATE语句没有出现错误,并且没有显式回滚事务,事务将被提交,更新操作将成为持久的。

8.释放锁:在事务提交后,InnoDB会释放之前锁定的行,允许其他事务访问它们。

9.返回结果:UPDATE语句执行完毕后,返回更新的行数或其他相关信息。

6.数据库的两阶段提交是怎么样的?

日志文件两阶段提交技术就解决了redo 日志和 binlog 日志文件记录数据不一致的问题

7.MySQL关键字的执行顺序

1.from

  1. where

  2. group by

  3. having

  4. select

  5. order by

8.什么样的数据不推荐加索引?

1.低选择性的列:低选择性的列指的是具有很少不同值的列。如果一列只有很少几个不同的值,那么为它添加索引可能不会提供显著的性能改进,而且可能浪费存储空间。例如,性别列通常只有两个不同的值(男和女),对其添加索引通常没有太大意义。

2.频繁更新的列:如果一个列经常被更新,特别是大规模的批量更新,那么索引会增加更新操作的开销。每次更新索引列都需要维护索引结构,这可能会导致性能下降。在这种情况下,需要仔细权衡查询性能和更新性能。

3.小表:对于非常小的表,查询通常非常快,即使没有索引。在这种情况下,添加索引可能只会增加存储开销,而不会明显提高性能。

4.不常被查询的列:如果一个列很少被用于查询条件,那么为其添加索引可能没有多大意义。索引应该主要用于加速经常被查询的列。

5.短文本列:对于非常短的文本列,如标签或枚举值,索引的效益可能有限。短文本列通常可以快速地进行全表扫描而不需要索引。

6.临时表:用于存储临时数据的表通常不需要索引,因为它们的生命周期很短暂,不会频繁进行查询操作。

9.索引失效的场景?

1.索引列值为null,索引失效

2.左或左右模糊匹配,因为mysql采用最左匹配原则。

3.查询条件中队索引列使用函数。

4.查询条件对索引列使用表达式计算。

5.如果索引列是字符串,并且条件语句中输入参数是数字,那么索引列会产生隐式类型转换,CAST函数实现,因为等同于堆索引列使函数,导致索引失效,反之索引列是数字,输出参数是字符串,那么不会失效。

6.在 WHERE 子句中,如果在 OR 前的条件列是索引列,但OR后面的条件列不是索引列。

7.数据量极少的情况下,MySQL 不会使用索引,因为全表扫描速度更快。

8.使用 select * 语句,大概率不会走索引,因为不是每一列都加索引。

9.但如果把两个单独建了索引的列,用来做列对比时索引会失效。

10.主键字段使用 Not In 关键字查询数据范围,依然走索引,如果是普通索引使用 Not In 关键字查询数据范围,索引失效。

11.使用 Not Exists 关键字,索引也会失效。

12.使用 Order by 注意最左匹配,并且要加limit或者where关键字,否则索引会失效。

10.介绍一下红黑树和平衡二叉树的区别?

红黑树的规则:

1、根节点为黑色。

2、所有节点都是黑色或红色。

3、所有叶子节点(Null)都是黑色。

4、红色节点的子节点一定是黑色的。

5、任意一个节点到其叶子节点的所有路径上的黑色节点数量相同(黑色完美平衡二叉树)。

  • 平衡二叉树的左右子树的高度差绝对值不超过1,但是红黑树在某些时刻可能会超过1,只要符合红黑树的五个条件即可。
  • 二叉树只要不平衡就会进行旋转,而红黑树不符合规则时,有些情况只用改变颜色不用旋转,就能达到平衡。

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

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

相关文章

Hdoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Java语法之字符串类型

String类 在Java中,使用String类定义字符串类型,如下: String s1"hello";System.out.println(s1); 字符串拼接 只要s1s2即可 在字符串中,如果俩个字符串进行相加,那他就是字符串拼接的意思 补充 如上&am…

Leetcode—704.二分查找【简单】

2023每日刷题&#xff08;四十七&#xff09; Leetcode—704.二分查找 实现代码 int lower_bound(int* arr, int numsSize, int tar) {int left 0, right numsSize;int mid left (right - left) / 2;while(left < right) {mid left (right - left) / 2;if(arr[mid] …

网页开发 JS基础

目录 JS概述 基本语法 数据类型内置方法 DOM对象 查找标签 绑定事件 操作标签 jQuery 查找标签 绑定事件 操作标签 Ajax请求 数据接口 前后端分离 ajax的使用 JS概述 一门弱类型的编程语言,属于基于对象和基于原型的脚本语言. 1 直接编写<script>console…

基于SpringBoot的旅游信息网【源码好优多】

简介 旅游信息网是一款介绍旅游相关内容的网站&#xff0c;分为前台和后台部分&#xff0c;其中前台用户注册以后可以浏览景点、景点详情、预订景点、酒店、车票、保险、以及浏览旅游攻略、个人信息修改、在线留言等&#xff0c;管理员在后台对景点、攻略、订单信息、酒店信息、…

【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(2)后端跨域、登录模块、springboot分层架构、IDEA修改快捷键、vue代码风格

项目笔记为项目总结笔记,若有错误欢迎指出哟~ 【项目专栏】 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(1)spring boot项目搭建、vue项目搭建、微信小程序项目搭建 【java+vue+微信小程序项目】从零开始搭建——健身房管理平台(2)后端跨域、登录模块、sp…

mysql手动事务

目录 &#x1f680;&#x1f680; 简要 手动事务使用案例 事务的特性 事务的隔离级别 脏读 不可重复读 幻读 查看事务隔离级别 设置隔离级别 &#x1fae1;&#x1fae1; 简要 mysq事务是自动提交的, 例如insert, update语句等 如下: 想要手动设置mysql事务就需…

SmartSoftHelp8,Web前端性能提升,js,css,html 优化压缩工具

Web前端js&#xff0c;css&#xff0c;html 优化压缩工具 提高web 前端性能&#xff0c;访问速度优化专业工具 CSS&#xff0c;js&#xff0c;html 单文件&#xff0c;多文件 单个&#xff0c;批量压缩优化 web前端优化&#xff1a;减少空格&#xff0c;体积压缩&#xff0…

一文通关物理机Ubuntu22.04融合部署OpenStack

前言 因为博主笔记本是amd的&#xff0c;就最近搞了个小主机&#xff0c;就想装个云平台玩玩&#xff0c;搞了三四天才正儿八经弄完&#xff0c;摸了一大堆错误出来&#xff0c;在文章前面我会将这些需要注意的点列举出来。 环境 物理环境&#xff1a; i5 12450H 32G内存 无线…

Windows微软常用运行库合集2023

微软常用运行库合集适用于Windows系统的运行库合集包&#xff0c;基于微软官方的运行库而制作的&#xff0c;包括了常用的vb&#xff0c;vc2005/2008/2010/2012/2013/2017/2019/2005-2022&#xff0c;Microsoft Universal C Runtime&#xff0c;VS 2010 Tools For Office Runti…

实用工具网站合集值得收藏![搜嗖工具箱]

最近一段时间有点忙&#xff0c;一直没有更新在此给大家说声抱歉哈&#xff0c;有些小伙伴儿私信说想要用到的工具&#xff0c;茶壶儿也会尽可能满足大家&#xff01;今天我们要分享的工具主要有以下几款&#xff0c;我们来一起看一下吧&#xff1f; 一帧秒创 https://aigc.y…

ctfhub技能树_web_web前置技能_HTTP

目录 一、HTTP协议 1.1、请求方式 1.2、302跳转 1.3、Cookie 1.4、基础认证 1.5、响应包源代码 一、HTTP协议 1.1、请求方式 注&#xff1a;HTTP协议中定义了八种请求方法。这八种都有&#xff1a;1、OPTIONS &#xff1a;返回服务器针对特定资源所支持的HTTP请求方法…

jsp 管理员登录界面与登录验证

验证分两种情况 &#xff0c;成功&#xff0c;进入管理员页&#xff0c;可以看信息和删记录 失败&#xff0c;直接给出登录失败&#xff0c;然后重新登录 login.jsp <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF…

基于51单片机控制恒压供水系统设计

**单片机设计介绍&#xff0c;基于51单片机的篮球计分器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 设计一个基于51单片机控制的恒压供水系统是一个复杂的工程&#xff0c;涉及到硬件设计和软件编程等多个方面。以下是一…

TypeScript编程语言学习,为学习HarmonyOS开发做准备

1. 编程语言 ArkTS是HarmonyOS优选的应用开发语言&#xff0c;它在TypeScript&#xff08;TS&#xff09;的基础上&#xff0c;匹配ArkUI扩展&#xff0c;扩展了声明式UI、状态管理等相应的能力。 JavaScript&#xff08;JS&#xff09;&#xff0c;使用在Web应用开发&#xf…

MacOS qemu运行loongarch linux

本文章参考了 https://github.com/LeisureLinux/bilibili/blob/master/scripts/qemu-busybox.sh#L205 windows qemu安装飞腾Aarch64 Loongarch64 操作系统 亲测_qemu安装arm系统-CSDN博客 https://www.cnblogs.com/missed-forest/p/17667862.html 1. 安装qemu brew instal…

在linux服上部署vue+springboot+nginx项目

一、环境准备 1、安装winscp便于可视化操作linux&#xff1a;winscp安装及关联putty使用_putty.exe没有找到_cherishSpring的博客-CSDN博客 2、安装jdk&#xff1a;linux系统安装jdk-CSDN博客 3、安装mysql&#xff1a;Linux7安装mysql数据库以及navicat远程连接mysql-CSDN博…

opencv知识库:利用cv2.resize()函数进行图像缩放

引言 在numpy知识库&#xff1a;深入理解numpy.resize函数和数组的resize方法中&#xff0c;小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看&#xff0c;numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

Hdoop学习笔记(HDP)-Part.19 安装Kafka

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

《功能磁共振多变量模式分析中空间分辨率对解码精度的影响》论文阅读

《The effect of spatial resolution on decoding accuracy in fMRI multivariate pattern analysis》 文章目录 一、简介论文的基本信息摘要 二、论文主要内容语音刺激的解码任务多变量模式分析&#xff08;MVPA&#xff09;K空间 空间分辨率和平滑对MVPA的影响平滑的具体过程…