Java面试题-MySQL数据库

文章目录

    • 1.事务
        • 1.事务的特性 ACID
        • 2.并发事务问题
        • 3.undo log 和redo log的区别?
        • 4.事务的隔离性是如何保证的呢?解释一下MVCC?
    • 2.索引
        • 1.如何定位慢查询?
        • 2.explain
        • 3.了解过索引吗?索引的底层数据结构B树和B+树对比
        • 4.什么是聚集索引,什么是二级索引?
        • 5.什么是回表查询?
        • 6.什么叫覆盖索引?
        • 7.MySQL超大分页处理,使用覆盖索引+子查询临时表
        • 8.索引创建的原则
        • 9.索引失效的情况
    • 3.SQL优化
        • 1.SQL怎么优化?
        • 2.union all 与union的区别
    • 4.主从复制
        • 1.使用主从复制的原因?
        • 2.MySQL主从同步原理

1.事务

1.事务的特性 ACID

2.并发事务问题

脏读:一个事务读到了另一个事务还没有提交的数据 解决:读已提交

不可重复读:事务A先读一条数据,然后再读这条数据发现被改了 解决:可重复读

幻读:事务A读取数据时,发现没有对应的数据行,准备插入时发现这行数据已经存在了 解决:串行化

3.undo log 和redo log的区别?

undo log是回滚日志,记录的是数据库的逆操作,比如插入一条数据,记录的其实是删除一条数据,用来做回滚的。

redo log是重做日志,记录的是数据页的物理变化,用于宕机时进行数据恢复的。

4.事务的隔离性是如何保证的呢?解释一下MVCC?

CleanShot 2024-08-14 at 08.54.08@2x

主要有三个方面,隐藏字段,undo log版本链,readView

隐藏字段:有最近修改事务id,回滚指针

undo log版本链:就是多个事务同时修改一条记录时,会通过回滚指针和undo log日志形成一条链表

readView:读视图,根据一些匹配规则来决定要读取哪个版本的数据,对于不同的事务隔离级别快照读是不同的,访问结果也是不一样的,比如读已提交每次读的时候都会生成一个readView,而可重复读只有第一次读的时候才生成readView

2.索引

1.如何定位慢查询?

首先要通过请求的时间去判断这个接口的响应速度是不是正常的。

接下来可以使用运维工具skywalking,检测出慢查询的SQL。

也可以在mysql中开启慢日志查询,记录慢查询的SQL。

2.explain

主要有四个参数:可能用到的索引,实际用到的索引,索引长度以及额外的优化建议。

可以根据实际用到的索引以及索引长度去判断是否有索引失效了,然后可以根据额外字段的信息去优化,比如Using index condition就是使用了索引,但是需要回表查询数据,最后就是通过类型去分析,避免索引树扫描和全盘扫描。

CleanShot 2024-08-13 at 13.37.18@2x

3.了解过索引吗?索引的底层数据结构B树和B+树对比

索引底层是使用B+树来实现的,就是一个数据结构,用于增加SQL查询速度的一个手段。

B树中的每个节点都存储键和数据,然后B+树除了叶子节点都是存键的,只有叶子结点才存储实际数据,并且是一个双向链表,方便扫库和区间扫描,而且阶数更多,路径更短。

4.什么是聚集索引,什么是二级索引?

聚集索引的选举规则:按照主键、第一个唯一索引,隐藏字段中的rowid的顺序进行选举

聚集索引就是B+树的叶子节点存储的是id和整行数据(只有一个),二级索引是存储的二级索引的值以及id值(可以有多个)

5.什么是回表查询?

假设id,name,age,其中name是二级索引,如果根据name查询id,name就不会回表,因为二级索引中可以直接查询出来,但是如果还要查询age,那么就需要从二级索引中查询出id,然后用这个id去聚集索引中查询整行数据,从中得到age。

6.什么叫覆盖索引?

覆盖索引就是查询使用了索引,然后需要返回的列使用这个索引全部都能找到。比如id,name,age,name是二级索引,直接使用name查询id和name就是覆盖索引。

7.MySQL超大分页处理,使用覆盖索引+子查询临时表

CleanShot 2024-08-13 at 14.07.47@2x

CleanShot 2024-08-13 at 14.12.30@2x

8.索引创建的原则

原则有很多,但是有一个前提是这张表的数据量必须要足够大,比如单表10万条数据,然后对于常作为查询条件的字段,比如where,group by,order by的字段才要考虑加索引,并且要控制索引的数量,因为索引只是增加查询效率,会影响增删改的效率,尽量使用联合索引,因为很多时候可以覆盖索引。

9.索引失效的情况

1.违反最左前缀法则

2.范围查询时右边的列,不能使用索引

CleanShot 2024-08-13 at 14.24.10@2x

3.索引列进行运算操作,索引将失效

CleanShot 2024-08-13 at 14.24.57@2x

4.字符串不加单引号,索引失效

CleanShot 2024-08-13 at 14.26.44@2x

5.头部模糊查询会导致索引失效,最后的一个元素模糊,则索引不会失效

CleanShot 2024-08-13 at 14.27.51@2x

6.or连接的条件,前面的列有索引,后面的列没有索引,那么涉及到的索引都不会被用到

CleanShot 2024-08-02 at 18.35.59@2x

3.SQL优化

1.SQL怎么优化?

首先在设计表的时候要选择合适的字符串类型,比如定长的字段就使用char,不要使用varchar,效率较低

然后在SQL语句方面,查询的时候一定要指定字段名称,不要使用select *,避免索引失效的写法,使用union all代替union,再就是join的优化了,能用inner join 就不要用left right join 如果必须使用一定要小表驱动,减少大表的扫描次数。

2.union all 与union的区别

union all是直接将结果合并,可以包含重复数据

union 是将结果合并,并过滤掉重复数据,会多一次过滤

4.主从复制

1.使用主从复制的原因?

2.MySQL主从同步原理

CleanShot 2024-08-14 at 09.17.50@2x

CleanShot 2024-08-14 at 09.18.34@2x

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql8安装时提示-缺少Microsoft Visual C++ 2019 x64 redistributable

MySQL8.0安装包mysql-8.0.1-winx64进行安装,提示:This application requires Visual Studio 2019 x64Redistributable, Please install the Redistributable then runthis installer again。出现这个错误是因为我们电脑缺少Microsoft Visual C 这个程序&…

【stm32学习】STM32F103实操primary(FlyMCU)

github插入图片实在是太难用了,暂时懒得学就先用CSDN吧hh 一、在设备管理器下,找到单片机,并检查与FlyMCU-搜索端口 显示的是否一致 二、在搜索串口右面的栏里选中该Port,波特率选中115200 三、选择文件夹中的.hex文件&#xff0…

【C语言系列】深入理解指针(5)

深入理解指针(5) 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1:2.2.2代码2:2.2.3代码3:2.2.4代码4:2.2.5代码5&#…

『Apisix进阶篇』结合Consul作服务发现实战演练

文章目录 一、引言二、APISIX与Consul集成2.1 环境准备2.2 配置Consul服务发现2.2.1 修改APISIX配置文件2.2.2 重启APISIX 2.3 在路由中使用Consul服务发现2.3.1 创建路由2.3.2 验证路由 2.4 高级配置2.4.1 服务过滤2.4.2 多数据中心支持 三、总结 📣读完这篇文章里…

迁移学习 Transfer Learning

迁移学习(Transfer Learning)是什么? 迁移学习是一种机器学习方法,它的核心思想是利用已有模型的知识来帮助新的任务或数据集进行学习,从而减少训练数据的需求、加快训练速度,并提升模型性能。 &#x1f…

深入理解 C++17 std::is_swappable

文章目录 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的变体注意事项结论 深入理解 C17 std::is_swappable 引言 在 C 编程中,交换两个对象的值是一个常见的操作。为了确保代码的通用性和安全性&am…

Java/Kotlin双语革命性ORM框架Jimmer(一)——介绍与简单使用

概览 Jimmer是一个Java/Kotlin双语框架 包含一个革命性的ORM 以此ORM为基础打造了一套综合性方案解决方案,包括 DTO语言 更全面更强大的缓存机制,以及高度自动化的缓存一致性 更强大客户端文档和代码生成能力,包括Jimmer独创的远程异常 …

deepseek+kimi自动生成ppt

打开deepseek官网,输入详细的需求,让他生成个ppt 接着deepseek开始思考生成了 接着复制生成了的内容 打开kimi粘贴刚才deepseek生成的内容 可以一键生成啦,下载编辑使用吧

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…

探索从传统检索增强生成(RAG)到缓存增强生成(CAG)的转变

在人工智能快速发展的当下,大型语言模型(LLMs)已成为众多应用的核心技术。检索增强生成(RAG)(RAG 系统从 POC 到生产应用:全面解析与实践指南)和缓存增强生成(CAG&#x…

采用idea中的HTTP Client插件测试

1.安装插件 采用idea中的HTTP Client插件进行接口测试,好处是不用打开post/swagger等多个软件,并且可以保存测试时的参数,方便后续继续使用. 高版本(2020版本以上)的idea一般都自带这个插件,如果没有也可以单独安装. 2.使用 插件安装完成(或者如果idea自带插件),会在每个Con…

WebStorm设置Vue Component模板

下载vue.js插件 下面有模板样例 Composition API:这是 Vue 3 的一项新特性,允许通过 setup 函数来组织组件逻辑。Options API:这是 Vue 2 和 Vue 3 都支持的传统方式,通过定义组件的 data、methods、computed 等来组织逻辑。 Comp…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<7>

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 今天我们一起来学习转移表,回调函数,qsort… 目录 一、转移表1.1 定义与原理1.3…

DeepSeek-R1:通过纯强化学习提升大模型推理能力,对于真正的强 AI (AGI/ASI),要放弃人类评审,让TA学会自我评估与博弈

DeepSeek-R1:通过纯强化学习提升大模型推理能力,对于真正的超级人工智能,要放弃人类评审,让TA学会自我评估与博弈 论文大纲理解Why - 这个研究要解决什么现实问题What - 核心发现或论点是什么HowHow good - 研究的理论贡献和实践意…

LabVIEW2025中文版软件安装包、工具包、安装教程下载

下载链接:LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2025安装图文教程》 1、解压后,双击install.exe安装 2、选中“我接受上述2条许可协议”,点击下一步 3、点击下一步,安装NI Packa…

使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…

快速在wsl上部署学习使用c++轻量化服务器-学习笔记

知乎上推荐的Tinywebserver这个服务器,快速部署搭建,学习c服务器开发 仓库地址 githubhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServerhttps://link.zhihu.com/?targethttps%3A//github.com/qinguoyi/TinyWebServer 在…

【R语言】apply函数族

在R语言中使用循环操作时是使用自身来实现的,效率较低。所以R语言有一个符合其统计语言出身的特点:向量化。R语言中的向量化运用了底层的C语言,而C语言的效率比高层的R语言的效率高。 apply函数族主要是为了解决数据向量化运算的问题&#x…

spring 学习(工厂方式 实例化对象(静态工厂,实例化工厂,实现factorybean 规范))

目录 前言 第一种:静态工厂方式实例化对象 静态工厂的特点 demo(案例) 第二种:实例工厂的方式 实例工厂和静态工厂的区别 demo(案例) 第三种:实现FactoryBean规范的方式 demo(案例) 前言 spring 实…

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…