面试(06)————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)语句

 

模拟面试

问题十四: 分库分表

拆分策略

垂直分库

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

特点:

 

垂直分表 

水平分库

水平分表

新的问题和新的技术

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

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

相关文章

2024 IDM最新破解版及软件介绍

*IDM:信息时代的高效管理工具** 在快节奏的现代社会中,随着信息的爆炸式增长,如何高效、有序地管理信息成为每个人都需要面对的挑战。IDM,作为一种信息管理工具,正在逐渐受到人们的青睐。 IDM,全称Inform…

Android 出现4G模块无法上网问题

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

【prometheus】k8s集群部署AlertManager实现邮件和钉钉告警

目录 一、AlertManager概述 1.1 alertmanager简介 1.2 AlertManager核心概念 1.2.1 分组 1.2.2 抑制 1.2.3 静默 1.2.4 客户的行为 1.2.5 高可用性 二、Alertmanager部署邮箱告警 2.1 邮箱配置 2.2 Alertmanager global和route路由配置 2.3 部署prometheus和alertM…

如何在PostgreSQL中创建一个新的数据库,并指定所有者?

文章目录 解决方案示例代码 PostgreSQL是一个强大的开源关系型数据库管理系统,它允许用户创建和管理多个数据库。在PostgreSQL中创建一个新的数据库并指定所有者是一个常见的操作。下面,我们将详细解释如何执行这一操作,并提供示例代码。 解…

Redis入门到通关之数据结构解析-SkipList

文章目录 ☃️概述☃️总结 ☃️概述 SkipList(跳表)是一种数据结构,用于实现有序元素的动态集合,它的设计目的是在有序链表的基础上通过增加多级索引来提高查找效率。 跳表的核心思想是在原始链表的基础上建立多层索引&#xf…

如何使用 Node.js 发送电子邮件全解和相关工具推荐

大多数Web应用程序都需要发送电子邮件。它可能用于注册、密码重置、状态报告,甚至是完整的市场营销活动,如新闻和促销。本教程解释了如何在Node.js中发送电子邮件,但其概念和挑战适用于您正在使用的任何系统。 你会在 npm 上找到大量与电子邮…

贪吃蛇的实现(一)

一、前言 学完C语言和数据结构的链表部分后,贪吃蛇的游戏也终于可以着手的实现了。对于贪吃蛇这个经典游戏,相信小伙伴们都不会太陌生,接下来我们 一起去剖析关于贪吃蛇游戏内部的一些逻辑结构和整体思维。 二、Win32 API 本章实现贪吃蛇会用…

读天才与算法:人脑与AI的数学思维笔记06_算法的进化

1. 现代算法 1.1. 知识不仅建立在真理之上,也建立在错误之上。 1.1.1. 卡尔荣格(Carl Jung) 1.2. 现代算法是可以自学的,尤其是推荐系统算法,它可以根据每个人的喜好推荐有趣的东西给我们 1.2.1. 算法通过与用户之…

PTA L2-052 吉利矩阵

题目 解析 这题考的是搜索剪枝 可行性剪枝: 即判断当前行(列)是否已经超过L和剩下的格子都填最大值是否小于L,若是则剪枝。 当前行数大于1时,判断上一个填完的行是否等于L,若否,则剪枝。 当前行…

一个简单的记工tkinter窗口

代码分享: 导入datetime模块,用于获取当前日期 import datetime as da 导入csv模块,用于读写csv文件 import csv 导入tkinter模块,用于创建窗口和按钮 from tkinter import * 创建主窗口 appTk() 设置窗口大小为1048x2048&#xff0…

【网络协议】 TCP与UDP协议区别及应用场景深度分析

1. TCP与UDP简介 1.1 TCP 1.1 定义 TCP(TransmissionControl Protocol)传输控制协议。 是一种可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应…

ROS1快速入门学习笔记 - 01Linux基础

目录 一、Linux极简基础 二、C与Python极简基础 1. for循环 2. while循环 3. 面向对象 一、Linux极简基础 终端快捷键:ctrlaltt 命令行的操作方式 查看当前终端所在路径:pwd切换路径cd;例如cd /home/ 进入home文件夹;cd …

【精】Devops实战学习CI/CD落地方案#CI篇#

目录 先有个大概了解 基本概念 CI/CD Devops 阿里云效 devops产品 K8s jenkins docker git maven 知行合一,上手操作 实操记录 安装VMware 安装并配置虚拟机 安装并配置docker docker安装 修改镜像源(关键且易出错) CentOS…

【数据结构-树和二叉树-森林-哈夫曼树】

目录 1 树1.1 树的描述(基本术语) 2 二叉树(树的度最大为2)2.1 注意事项-五种基本形态2.2 二叉树的抽象数据类型定义 3 二叉树的性质3.1 两种特殊形式的二叉树-重点会计算3.2 题目练习: 4 二叉树的存储结构4.1 顺序存储…

竞逐智能家居大模型:美的“蓄力”,海尔“疾行”

配图来自Canva可画 随着ChatGPT火热出圈,AI大模型便成为了各行各业必争的高地。“BAT”等互联网大厂、华为、小米等通讯巨头,以及一些垂直AI公司,都开始在大模型市场积极布局。众所周知,发展大模型的关键在于应用场景的落地&…

超星图书转成PDF格式

转为pdf 为避免浪费您的时间,本篇转载文章不值得花费您的宝贵时间阅读 方法一 感谢医学插画动画杜鹏 Roison An两位提供的方法,经试验后简化了一下,得出以下方法:1、使用超星打开你想要转换的图书2、依次打开本书的所有页面,不要…

Linux基础和常见命令速览

来源:Linux 基础知识总结 | JavaGuide 一、Linux文件系统 1. 文件系统 Linux 系统中的一个重要的概念:一切都是文件。 在 Linux 操作系统中,一切被操作系统管理的资源,如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件…

(避雷指引:管理页面超时问题)windows下载安装RabbitMQ

一、背景: 学习RabbitMQ过程中,由于个人电脑性能问题,直接装在windows去使用RabbitMQ,根据各大网友教程,去下载安装完之后,使用web端进行简单的入门操作时,总是一直提示超时,要么容…

Electron+Vue3整合-开发时整合-全部ts开发 + 一条命令启动vue3和electron两个服务

说明 本文介绍一下 Electron Vue3 的整合的中级操作。实现的效果是 : 1、一个正常的Vue3项目; 2、整合加入 Electron 框架 :开发时只执行一条命令,启动 vue 项目 后 再启动 electron;electron 的开发使用 typescript…