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

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

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

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

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

1)MySQL 锁类型

MySQL 中常见的锁类型包括:

  • 行级锁(Row-Level Locks):在行级别进行加锁,使得其他事务无法修改或删除已锁定的行。MySQL 使用的是一种称为多版本并发控制(MVCC)的行级锁。
  • 表级锁(Table-Level Locks):在整个表上进行锁定,限制其他事务对整个表的访问。这种锁定级别一般会导致并发性能下降,因为它会阻止其他事务对表的读写操作。
  • 页级锁(Page-Level Locks):在数据页级别进行加锁,这是一种介于行级锁和表级锁之间的锁定级别。不过,MySQL InnoDB 存储引擎并不直接支持页级锁。
  • 意向锁(Intention Locks):用于表锁定时,通知其他事务该表即将被加锁的类型,以避免死锁情况的发生。

2)乐观锁和悲观锁的区别

  • 悲观锁:在操作数据时,认为其他事务可能会修改数据,因此在操作之前会先对数据进行加锁,确保在整个事务过程中数据不会被其他事务修改。例如,在读取数据时,会加上排他锁,防止其他事务修改数据,直到当前事务释放锁为止。
  • 乐观锁:相对于悲观锁,乐观锁假设在整个事务过程中数据不会被其他事务修改,因此不会在操作之前对数据进行加锁。而是在提交事务时,会检查数据是否被其他事务修改过。如果没有,则提交成功;如果发现数据已经被修改,就会执行回滚操作,让用户决定如何处理。

3)解决死锁的方法

解决死锁的方法通常包括以下几种:

  • 超时机制:设置事务超时时间,在超时后自动回滚事务,避免死锁长时间占用资源。
  • 死锁检测和回滚:MySQL 会自动检测死锁,并选择一个事务进行回滚,解除死锁。
  • 优化事务:合理设计事务,尽量减少事务持有锁的时间,降低死锁的概率。
  • 锁定对象顺序:通过按照统一的顺序对数据库对象进行加锁,可以减少死锁的发生。例如,始终按照相同的顺序对表进行加锁,可以避免由于不同的事务加锁顺序不一致而导致的死锁。
  • 重试机制:当发生死锁时,通过重试事务的方式,重新执行事务,直到成功为止。

4)使用 EXPLAIN 分析查询语句

EXPLAIN 是 MySQL 提供的一个关键词,用于分析 SELECT 查询语句的执行计划。通过 EXPLAIN 关键词,可以查看 MySQL 是如何执行查询语句的,以及使用了哪些索引、表连接方式等信息。

分析查询语句的步骤通常如下:

  1. 使用 EXPLAIN 关键词加上要分析的查询语句,例如:EXPLAIN SELECT * FROM table_name WHERE condition;
  2. 查看 EXPLAIN 的输出结果,包括 idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra 等字段,这些字段提供了查询执行计划的详细信息。
  3. 根据输出结果,分析查询语句的执行计划,判断是否需要优化查询语句或者添加索引等操作。

5)count(*)count(1)count(字段名) 的区别

  • count(*):统计表中所有行的数量,包括 NULL 值行。
  • count(1):统计所有行中非 NULL 值的行数,因为传递给 COUNT 函数的参数是常量,所以实际上并不会统计任何具体的列值,而是简单地统计行的数量。
  • count(字段名):统计指定字段中非 NULL 值的行数。

在实际使用中,一般情况下这三种形式的效率差异不大,但在特定情况下可能会有微小的性能差异。

6)int(11) 中的数字 11 的含义

int(11) 中的数字 11 代表了字段的显示宽度,并不代表存储的数据大小或者范围。在 MySQL 中,int 类型的字段默认显示宽度是 11,这只是一种指定数据显示宽度的方式,不影响存储大小或者数据范围。因此,int(11)int(20) 存储的数据范围是相同的,只是显示宽度不同而已。这个数字在大多数情况下只是用于控制客户端显示的格式,并不影响实际存储或计算。

7)varcharchar 的区别

  • char
    • char 是一种固定长度的字符串类型。
    • 存储时会按照指定的长度进行存储,如果存储的字符串长度小于指定长度,会用空格进行填充。
    • 例如,char(10) 指定了长度为 10 的字符串,无论存储的实际字符串长度是多少,都会占用 10 个字符的存储空间。
  • varchar
    • varchar 是一种可变长度的字符串类型。
    • 存储时只占用实际字符串长度加上一个字节(用于存储长度信息)的存储空间。
    • 例如,varchar(10) 指定了最大长度为 10 的字符串,如果存储的实际字符串长度为 5,则只占用 6 个字符的存储空间。

8)SQL 调优的一般方法

SQL 调优是数据库性能优化的一个重要方面,一般的方法包括但不限于:

  • 分析查询语句:使用 EXPLAIN 分析查询执行计划,查看是否使用了索引、是否进行了全表扫描等。
  • 优化查询语句:修改查询语句结构,避免复杂的连接或子查询,使用更有效的查询方式。
  • 使用索引:根据查询的字段和条件使用合适的索引,避免全表扫描。
  • 优化表结构:合理设计表结构,避免过多冗余字段,规范化数据库结构。
  • 性能测试:通过性能测试工具或者监控工具,对查询性能进行评估和优化。

9)MySQL 数据的排序实现方式

MySQL 使用多种方式来实现数据排序,主要取决于查询中使用的排序字段和索引情况:

  • 使用索引排序:如果查询中使用的排序字段有合适的索引,MySQL 可以使用索引来进行排序,这样可以加速排序操作。
  • 使用文件排序:如果没有合适的索引可用,MySQL 将使用文件排序。它会将结果集存储在临时文件中,并进行排序操作。
  • 排序算法:MySQL 使用多种排序算法,包括快速排序、合并排序等,具体选择算法的方式取决于数据量和版本。

10)MySQL 避免单点故障问题的方法

为了避免 MySQL 单点故障问题,一般会采取以下措施:

  • 使用主从复制:配置主从复制,将读操作分散到多个数据库实例,同时也提高了故障恢复能力。
  • 使用数据库集群:通过配置数据库集群,将数据分散到多个节点上,提高了数据库的可用性和扩展性。
  • 使用数据库代理:通过数据库代理软件如 MySQL Router 或 ProxySQL,将请求分发到多个数据库服务器上。
  • 备份与恢复策略:建立定期的备份和恢复策略,确保在主节点故障时可以快速切换到备用节点。
  • 硬件负载均衡:使用负载均衡器将请求均衡分配到多个数据库服务器上,防止单个节点过载或故障。

这些方法结合起来可以有效地提高 MySQL 数据库的可用性和稳定性,避免因为单点故障而导致的系统中断或性能下降问题。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2W+ 访问!

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

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

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

相关文章

嵌入式智能硬件茶杯垫的设计与实现方案

iCupBox简介 这是一款智能杯垫产品,基于GTD时间管理理念设计,目的是提醒人们专心工作和及时喝水休息,提高工作效率。 https://gitee.com/jiangtao008/iCupBox 开原许可协议:MIT 项目分为客户端APP和杯垫固件系统: 客户端APP,使用QML开发,集成GTD时间管理方法,与杯垫固…

让AI学相机对焦: Learning to AutoFocus

前言 分析来自谷歌发表在 CVPR 2020 上的论文 Learning to Autofocus :https://arxiv.org/pdf/2004.12260 目前网上对这篇论文的分析较少,有的分析并没有指出关键点,如:论文解读: Learning to AutoFocus-CSDN博客&am…

pytorch-16 复现经典网络:LeNet5与AlexNet

一、相关概念 对于(10,3,227,227)数据表示,10张3通道的图,图的大小(特征数)为227*227. 通道数:作为卷积的输入通道数和输出通道数。 特征数:特征图的大小 步长stride和填充padding&…

三相电子负载:行业前沿

三相电子负载是模拟电网中实际负载的装置,主要用于电源、电机、变压器等产品的测试和老化。随着科技的发展,三相电子负载在电力、通信、汽车电子、新能源等领域的应用越来越广泛,成为行业前沿技术之一。 三相电子负载在电源行业的应用非常广泛…

聚会活跃气氛神器小程序源码系统 各种小游戏 让聚会不再冷场 带源代码包以及安装搭建教程

系统概述 在社交聚会中,如何让气氛活跃起来一直是一个让人关注的问题。小编给大家分享一款聚会活跃气氛神器小程序源码系统。它不仅提供了丰富多样的小游戏,还带有源代码包和详细的安装搭建教程,让你轻松打造属于自己的聚会互动平台。 代码…

Jtti:配置Nginx的并发连接数可以通过哪些方法实现?

配置Nginx的并发连接数可以通过修改其配置文件来实现。主要涉及的参数包括worker_connections和worker_processes。以下是具体的配置方法: 1. 修改Nginx配置文件 Nginx的主配置文件通常位于/etc/nginx/nginx.conf。打开该文件,找到events和http块&…

从docker镜像反推Dockerfile

在项目运维的过程中,偶尔会遇到某个docker image打包时候的Dockerfile版本管理不善无法与image对应的问题,抑或需要分析某个三方docker image的构建过程,这时,就希望能够通过image反推构建时的instruction. 想实现这个过程可以使…

YOLO创新点改进点的消融实验设计规范

YOLO改进的消融实验是一种重要的方法,用于评估和验证模型中不同组件的影响。在进行YOLO改进的消融实验时,我们可以选择一些可能的改进点,比如Backbone网络、Anchor框设计和损失函数设计,然后通过实验来分析它们对模型性能的影响。 首先,我们需要确定实验设计。对于每个改…

Qt 项目(CMake)支持多国语言(2024/05)

目录 1.在工程手动创建languages文件夹2.修改CMakeLists.txt3.在qml上随便添加一下文字内容4.执行CMake 参考:Qt 项目(CMake)设置国际化支持 1.在工程手动创建languages文件夹 2.修改CMakeLists.txt set(TS_FILES"${CMAKE_SOURCE_DIR}/languages/aidi_zh_CN.ts"&qu…

【GIT】常见问题整理

摘要 (一)命令行合并代码分支(二)git clone 拉取代码时没拉取到具体的业务代码提示warning: remote HEAD refers to nonexistent ref, unable to checkout. (一)命令行合并代码分支 ***有时候git网站总会…

PHP preg_replace正则表达式涉及汉字乱码

一、需求 PHP preg_replace,替换省、市、区为空 二、实现 1、使用表达式["省","市","自治州","自治区"],出现了乱码 $text "浙江省";$pattern /["省","市","自治州&qu…

C++(25): C++17探索:std::optional

1. 概述 std::optional是C17标准引入的一个新的标准库组件。这是一个轻量级的容器,旨在以类型安全的方式包装可能为空的值。std::optional为处理可能缺失的数据提供了一种优雅而简洁的方法,这在以往通常需要使用专门的“存在”标志或复杂的错误处理机制。…

怎样让拼多多新店靠前?怎么做好拼多多店铺生意?

在拼多多这个日益激烈的电商平台上,新店铺如何脱颖而出、提升排名,成为了许多卖家朋友关注的焦点。那么接下来跟各位卖家详细介绍怎样让拼多多新店靠前,以及怎么做好拼多多店铺生意。 一、怎样让拼多多新店靠前 1、完善店铺信息 完善店铺信…

超声波清洗机哪家好一点?四款无比卓越精品不可错过

在日常生活中,眼镜成为了我们不可或缺的伙伴,无论是阅读书籍、工作还是享受自然风光,清晰的视野总是至关重要。然而,眼镜上不可避免地会沾染灰尘、油脂甚至细菌,影响我们的视觉体验。传统的眼镜清洗方法虽然简单&#…

从0到1构建IM系统之技术选型

由于本人是一个以JAVA为主要编程语言的全栈工程师,所以这次的技术选型也是基于JAVA体系为基础来进行构建。 开发框架: spring 全家桶 功能强大并且覆盖全面,社区活跃,解决方案成熟,学习成本低(本人属于拿来…

JAVA学习-练习试用Java实现“Excel表列名称”

问题: 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 例如: A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入:columnNumber 1 输出&#…

SpringBoot项目文件上传校验工具类

功能介绍 FileValidationUtils是一个工具类,主要用于验证上传的文件。以下是其主要功能和特点: 1. 文件类型验证:FileValidationUtils类中定义了一个MIME_TYPE_MAP,这个映射表包含了允许上传的文件类型和对应的MIME类型。在vali…

package.json的配置

package.json的配置参考 package.json文件是Node.js项目中的一个重要配置文件,用于存储项目的元数据和各种配置信息。 以下是一些常见的 package.json配置项: { "name": "my-project", // 项目名称,遵循npm的命名规范…

新人学习笔记之(JavaScript运算符)

目录 一、运算符 1.运算符(operator)也被称操作符,最用于实现赋值、比较和算数运算等功能的符号。 2.javascript中常用的有 二、算术运算符 1.算数运算符概述 2.浮点数的精度问题 3.表达式和返回值 三、递增和递减运算符 1.递增和递减运算符…

Python使用MQTT连接新版ONENet

Python MQTT 连接新版ONENet 简介 前几个教程我们使用mqtt.fx连接了新版的ONENet, 只是跑通了MQTT协议,但是在实际操作下还需要实现具体环境、具体设备的MQTT连接,本章教程将以Python MQTT的方式连接 ONENet 参考文档: paho-mqtt PyPI …