面试(06)————MySQL篇

ops/2024/9/20 1:30:47/ 标签: 面试, mysql, 职场和发展

目录

问题一:在MySQL中,如何定位慢查询?

方案一:开源工具

方案二:MySQL自带慢日志

模拟面试

 问题二:这个SQL语句执行很慢,如何分析的呐?

 模拟面试

问题三:了解过索引吗?(什么是索引)

 索引的底层数据结构了解过吗?

模拟面试

​编辑 

问题四:聚簇索引和非聚簇索引

回表查询

​编辑 模拟面试

 问题五:覆盖索引、超大分页优化

覆盖索引

​编辑 MYSQL超大分页处理

优化思路

模拟面试

 问题六:索引创建原则有哪些?

模拟面试

问题七:什么情况下索引会失效? 

​编辑 1、违反最左原则

​编辑 2、范围查询右边的列,不能使用索引

3、不要再索引列上进行运算操作,索引会失效 

4、字符串不加单引号,可能会造成索引失效

​编辑 5、以%开头的like模糊查询,索引失效。如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

模拟面试

​编辑 问题八:谈谈你对sql优化的经验?

表的设计优化

SQL语句的优化

主从复制、读写分离

 模拟面试

问题九: 事务的特性

什么是事务?

ACID是什么 ?

模拟面试

​编辑 问题十:并发事务带来了哪些的问题?怎么解决这些问题?MySQL的默认隔离级别是什么?

并发事务问题

模拟面试

问题十一: undo log和redo log的区别

redo log

undo log

模拟面试

问题十二: 事务的隔离性是如何保证的呐?

解释一下MVCC

 记录中的隐藏字段

undo log

undo log的版本链

readView 

模拟面试

 问题十三:MySQL的主从同步原理

模拟面试

问题十四: 分库分表

拆分策略

垂直分库

垂直分表 

水平分库

水平分表

新的问题和新的技术


问题一:在MySQL中,如何定位慢查询?

方案一:开源工具

调试工具:Arthas

运维工具:Prometheus、Skywalking

方案二:MySQL自带慢日志

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志

如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

 配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息

/var/lib/mysql/localhost-slow.log

模拟面试

 问题二:这个SQL语句执行很慢,如何分析的呐?

可能的原因:

 一个SQL语句执行很慢,如何分析?

可以采用EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息

  •  possible_key 当前sql可能会使用到的索引
  • key 当前sql实际命中的索引
  • key_len 索引占用的大小
    其中可以通过第二点和第三点来查看是否可能会命中索引
  • Extra 额外的优化建议
  • type 这条sql的连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、index、all

        如果出现后两种情况,就说明这条sql就需要优化了

 模拟面试

问题三:了解过索引吗?(什么是索引)

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

 索引的底层数据结构了解过吗?

MySQL默认使用的索引底层数据与结构是B+树。

B+Tree是在BTree基础上的一种优化,使其更适合实现外存储索引结构,InnoDB存储引擎就是用B+Tree实现其索引结构

模拟面试

 

问题四:聚簇索引和非聚簇索引

 

回表查询

给name加了索引,所以它会走二级索引这条,查到之后,查到的其实是id等于10这个数据,然后再走聚集索引再查一遍,最后查到整行数据,这个过程就是回表查询(其实就是:先走二级索引查询,查到对应的主键值之后,再走聚集索引查询,查到整行数据)

 模拟面试

 问题五:覆盖索引、超大分页优化

覆盖索引

覆盖索引是指查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到。

 MYSQL超大分页处理

在数据量比较大时,如果进行limit分页查询,在查询时,越往后,分页查询效率越低。

 

优化思路

一般分页查询时,通过创建覆盖索引能够比较好地提高性能,可以通过覆盖索引加子查询形式进行优化

 和上面相比执行时间确实减少了很多

模拟面试

 问题六:索引创建原则有哪些?

模拟面试

问题七:什么情况下索引会失效? 

 1、违反最左原则

 

以下情况跳过了name字段,索引失效 

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

后一个情况的address的索引失效

3、不要再索引列上进行运算操作,索引会失效 

4、字符串不加单引号,可能会造成索引失效

 5、以%开头的like模糊查询,索引失效。如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效。

模拟面试

 问题八:谈谈你对sql优化的经验?

表的设计优化

SQL语句的优化

主从复制、读写分离

如果数据库的使用场景读的操作比较多的时候,为了避免写的操作所造成的性能影响 可以采用读写分离的架构。

读写分离解决的是,数据库的写入,影响了查询的效率

 

 模拟面试

问题九: 事务的特性

什么是事务?

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

ACID是什么 ?

模拟面试

 问题十:并发事务带来了哪些的问题?怎么解决这些问题?MySQL的默认隔离级别是什么?

并发事务问题

 

注意:事务隔离级别越高,数据越安全,但是性能越低。

模拟面试

问题十一: undo log和redo log的区别

redo log

undo log

undo log可以实现事务的一致性和原子性

模拟面试

问题十二: 事务的隔离性是如何保证的呐?

解释一下MVCC

全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突

MVCC的具体实现,主要依赖于数据库记录中的隐式字段、undo log日志、readView

 记录中的隐藏字段

undo log

undo log的版本链

不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的旧纪录,链表尾部是最早的旧纪录

readView 

模拟面试

 

 问题十三:MySQL的主从同步原理

mysql主从复制的核心就是二进制日志

二进制日志(binlog)记录了所有哦的DDL语句(数据定义语言)和DML语句(数据操纵语言),但不包括数据查询(select、show)语句

 

模拟面试

问题十四: 分库分表

拆分策略

垂直分库

以表为依据,根据业务将不同表拆分到不同库中

特点:

 

垂直分表 

水平分库

水平分表

新的问题和新的技术


http://www.ppmy.cn/ops/7876.html

相关文章

Jupyter的下载与安装

1.下载: 在anaconda的指定环境中 conda install nb_conda_kernels 2.打开 在anaconda指定环境中使用命令: jupyter notebook 3.输入指令后,会显示如下,根据显示地址打开 3. 在右边的new按钮处,选择相应环境&…

kafka部分partition的leader=-1修复方案整理

kafka部分partition的leader-1修复方案整理 1. 背景说明2. 修复测试2.1 创建正常的topic并验证生产和消费2.2 停止kafka模拟leader-12.3 修复parition2.4 修复完成验证生产消费是否恢复 3. 疑问和思考3.1 kafka在进行数据消费时,如果有partition的leader-1&#xff…

分布式与集群区别

1、提供服务是否相同 分布式:不同的机器上部署的是不同的服务模块,对外提供不同的服务 集群:不同机器上部署的是同样的模块,对外提供同样的服务 2、目的 分布式:分解任务,用来应对高并发。 集群&#…

【java毕业设计】 基于Spring Boot+mysql的绩效考核管理系统设计与实现(程序源码)-绩效考核管理系统

基于Spring Bootmysql的绩效考核管理系统设计与实现(程序源码毕业论文) 大家好,今天给大家介绍基于Spring Bootmysql的绩效考核管理系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获…

react17+antd4.18 动态实现面包屑导航Breadcrumb-----需改善

1、已经定义好的全部的路由配置,需要是这种格式的,可以再加上关于icon的内容. const routerMap [{path: /home,breadcrumbName: Home,},{path: /page1,breadcrumbName: Page 1,children: [{path: /page1/page101,breadcrumbName: Page 101,children: […

代码学习记录49---单调栈

随想录日记part49 t i m e : time: time: 2024.04.20 主要内容:今天开始要学习单调栈的相关知识了,今天的内容主要涉及:柱状图中最大的矩形 84.柱状图中最大的矩形 Topic184.柱状图中最大的矩形 题目&…

社区论坛小圈子小程序源码系统:自定义小程序管理社区圈子软件圈子系统系统开发-做社区圈子丨圈子论坛社区交友系统开源版小程序源码丨

简述 移动互联网的快速发展,微信小程序作为一种新型的应用形态,已经深入到人们的生活中。特别是对于社区论坛类应用,小程序版本可以更好地满足用户快速、便捷获取信息的需求。下面给大家分享一款社区论坛小圈子小程序源码系统。 在这个信息…

【剪映专业版】17高质量视频如何导出

视频课程:B站有知公开课【剪映电脑版教程】 1.导出 目的:导出高质量的视频 如果没有音频及字幕的情况下,音频导出和字幕导出为灰色 2.视频导出 超清:1080P 注意:如果原始素材的分辨率为小于1080P,如果导…

数据结构10:堆和堆排序

文章目录 树的概念及结构树的概念树的相关概念树的表示树在实际中的应用表示文件系统的目录树结构 二叉树概念及结构概念特殊的二叉树二叉树的性质二叉树的存储结构顺序存储链式存储 二叉树的顺序结构及实现二叉树的顺序结构堆的概念及结构 堆的实现堆的插入堆的删除堆的创建向…

研究生,该学单片机还是plc。?

PLC门槛相对较低,但是在深入学习和应用时,仍然有很高的技术要求。我这里有一套单片机入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习单片机,不妨点个关注,给个评论222,私信22&am…

写一个函数实现:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放)之解法改写

#include<stdio.h> void change(int *p){ int i,j,temp; int *pmax,*pmin; // 初始化最大值和最小值的指针 pmaxp; pminp; // 遍历矩阵&#xff0c;寻找最大和最小值 for(i0;i<5;i) for(ji;j<5;j) { if(*pm…

nginx开启basic认证

basic认证也叫做http基本认证&#xff0c;防止恶意访问 首先用在线网站生成一个叫做htpasswd的账号密码文件。 将生成结果复制到/etc/nginx/htpasswd文件中 在server的location中配置 server { listen 80; server_name a.com;location / { root html;index index.…

UE5 C++ 对项目工程的再认识

一.Intermediate 中间文件Intermediate&#xff0c;涉及到反射。胶水文件&#xff0c;与代码产生关联。通过Generate生成出来。 1.C#编译出第三方文件&#xff1a; 反射文件 头文件关联&#xff0c;UHT里的文件.h cpp的关联&#xff0c;UE将所有的cpp放到 gen.cpp里,实现自动关…

Python第四次作业

主程序 import MyTriangles1 float(input("请输入边长1:")) s2 float(input("请输入边长2:")) s3 float(input("请输入边长3:"))r MyTriangle.isvalid(s1, s2, s3) if r:a MyTriangle.area(s1, s2, s3)print("面积为&#xff1a;&quo…

es6编程风格

目录 1、变量let和常量const 2、静态字符串与动态字符串 3、解构赋值&#xff08;数组&#xff0c;对象&#xff09; 4、对象 5、数组 6、函数 7、Map结构 8、class类 9、模块 10、ESLint的使用 1、变量let和常量const ES6 提出了两个新的声明变量的命令&#xff1a;…

数据结构--图

图 1.图的基本介绍 1&#xff09;图的定义&#xff1a; 图(Graph)G由两个集合V和E组成&#xff0c;记为G(V, E)&#xff0c;其中V是顶点的有穷非空集合&#xff0c;E是V中顶点偶对的有穷集合&#xff0c;这些顶点偶对称为边。V(G)和E(G)通常分别表示图G的顶点集合和边集合&a…

javascrip中的class

在JavaScript中&#xff0c;class是一种用于创建对象的模板或蓝图。它是ES6引入的一种语法糖&#xff0c;用于简化对象的创建和继承过程。下面是一个示例代码&#xff0c;详细说明了JavaScript中class的使用&#xff1a; javascript class Animal { constructor(name, age) …

Android优化RecyclerView图片展示:Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas,Kotlin(b)

Android优化RecyclerView图片展示&#xff1a;Glide成堆加载批量Bitmap在RecyclerView成片绘制Canvas&#xff0c;Kotlin&#xff08;b&#xff09; 对 Android GridLayoutManager Glide批量加载Bitmap绘制Canvas画在RecyclerView&#xff0c;Kotlin&#xff08;a&#xff09;-…

Linux配置腾讯云yum源(保姆级教学)

1. 备份原有的 yum 源配置文件 例如&#xff1a; mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2. 下载腾讯云的 yum 源配置文件 例如&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/…

python爬虫(Selenium案列)第二十四

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…