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

 

模拟面试

问题十四: 分库分表

拆分策略

垂直分库

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

特点:

 

垂直分表 

水平分库

水平分表

新的问题和新的技术

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

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

相关文章

OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核

本文主要介绍如何使用Python和OpenCV库通过卷积操作来应用不同的图像滤波效果。主要分为几个步骤:图像的读取与处理、自定义卷积函数的实现、不同卷积核的应用,以及结果的展示。 卷积 在图像处理中,卷积是一种重要的操作,它通过…

ES中文检索须知:分词器与中文分词器

ElasticSearch (es)的核心功能即为数据检索,常被用来构建内部搜索引擎或者实现大规模数据在推荐召回流程中的粗排过程。 ES分词 分词即为将doc通过Analyzer切分成一个一个Term(关键字),es分词在索引构建和数据检索时均有体现&…

【力扣 Hot100 | 第六天】4.21(最长连续序列)

文章目录 10.最长连续序列10.1题目10.2解法:哈希法10.2.1哈希思路10.2.2代码实现 10.最长连续序列 10.1题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时…

葡萄书--关系图卷积神经网络

异质图和知识图谱 同质图与异质图 同质图指的是图中的节点类型和关系类型都仅有一种 异质图是指图中的节点类型或关系类型多于一种 知识图谱 知识图谱包含实体和实体之间的关系&#xff0c;并以三元组的形式存储&#xff08;<头实体, 关系, 尾实体>&#xff0c;即异…

Python 全栈安全(二)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第二部分&#xff1a;认证与授权 本书的第二部分是最具商业价值的部分。我这样说是因为它充满了大多数系统需要具备的实用工作流示例&#xf…

Python 全栈安全(四)

原文&#xff1a;annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十五章&#xff1a;内容安全策略 本章涵盖 使用 fetch、navigation 和 document 指令编写内容安全策略 使用 django-csp 部署 CSP 使用报…

Redis 内存策略

目录 1. key到期的情况 Redis的内存结构redisDb Redis怎么知道哪个key过期的 Redis对过期key的删除策略 惰性删除 周期删除 2. key未到期&#xff0c;但内存使用已达上限的情况 Redis检查内存阈值的时刻 达到内存上限&#xff0c;Redis淘汰key的策略 结构体redisObj…

【测试】Kali Linux 渗透安全学习笔记(4) - 单一服务器扫描

距离上次做 Kali Linux 分享已经相隔半年之久了&#xff0c;刚好需要主导公司每半年一次的本地安全加固工作&#xff0c;这次将简单分享自己是如何做单一服务器的扫描。 声明&#xff1a; 本文测试的站点为自家站点仅做学习使用&#xff0c;不存在侵犯网络信息安全问题&#…

【C语言】——内存函数的使用及模拟实现

【C语言】——内存函数的使用及模拟实现 前言一、 m e m c p y memcpy memcpy 函数1.1、函数功能&#xff08;1&#xff09;函数名理解&#xff08;2&#xff09;函数介绍 1.2、函数的使用1.3、函数的模拟实现 二、 m e m m o v e memmove memmove 函数2.1、函数功能2.2、函数的…

HarmonyOS开发环境搭建 移动开发 鸿蒙开发 ArkTS

&#x1f4dc;目录 &#x1f4a1; 环境搭建 &#x1f680;安装nodejs &#x1f935;安装ohpm &#x1f354;安装SDK &#x1f4a5;Emulator安装 &#x1f336;️新建ArkTs项目 &#x1f3c6;️ArkTS语言 ✨️基本语法 &#x1f388; 声明式UI描述 &#x1f371;组件 …

java的单元测试和反射

单元测试 就是针对最小的功能单元&#xff0c;编写测试代码对其进行正确性测试 Junit单元测试框架&#xff1a; 可以用来对方法进行测试 有点&#xff1a; 可以灵活的编写测试代码&#xff0c;可以针对某个方法进行测试&#xff0c;也支持一键完成对全部方法的自动发测试&a…

理解JMM

JMM 对volatile的理解 volatile 是java虚拟机提供轻量级的同步机制 1、保证可见性 2、不保证原子性 3、禁止指令重排 那么可见性与JMM相关 什么是JMM Java内存模型&#xff0c;不存在的东西&#xff0c;是一个概念&#xff0c;是一个约定 线程加锁前&#xff0c;必须读取…

uni-app 如何添加模拟器

uni-app 如何添加模拟器 使用微信开发者工具运行微信小程序使用 HBuilderX 内置模拟器使用第三方 Android 模拟器 下载并安装&#xff1a;配置环境&#xff1a;连接模拟器&#xff1a; 总结 有哪些可以使用的安卓模拟器软件 uni-app 如何添加模拟器 Uni-App 是一个基于 Vue.js…

认知觉醒 PDF电子版 下载

认知觉醒 PDF电子版 开启自我改变的原动力 周岭 / 人民邮电出版社 / 2020-10 链接&#xff1a;https://pan.baidu.com/s/1EHUK_AhvE5TWAZsYXFQ5QA?pwdwrho 提取码&#xff1a;wrho

基于IIoT的设备预测性维护设计

基于IIoT的设备预测性维护设计 一、引言 在工业物联网&#xff08;IIoT&#xff09;的背景下&#xff0c;设备预测性维护成为了一种关键的战略&#xff0c;能够帮助企业提前发现并解决设备故障&#xff0c;从而提高生产效率、减少停机时间&#xff0c;并降低总体维护成本。为了…

uniapp 如何区分目前运行环境(app、web、mp-weixin)

platform 区分 iOS、Android uniplatform 区分 app、web、mp-weixin ....

GPT-3.5 Turbo 的 temperature 设置为 0 就是贪婪解码?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 将 GPT-3.5 Turbo 的 temperature 设置为 0 通常意味着采用贪婪解码&#xff08;greedy decoding&#xff09;策略。在贪婪解码中&#xff0c;模型在每一步生成文本时选择概率最高的词元&#xff0c;从…

Microchip 32位MCU CAN驱动图文教程-附源码

文章目录 创建一个新的32位MCU工程Microchip MCC Harmony配置界面说明在MCC下配置系统的时钟在MCC下配置所需要使用的模块配置调试打印模块配置CAN模块配置管脚功能修改系统堆栈大小生成代码 添加用户代码 创建一个新的32位MCU工程 确保电脑上已经安装最新的MPlab X IDE、XC32编…

ubuntu安装QEMU

qemu虚拟机的使用&#xff08;一&#xff09;——ubuntu20.4安装QEMU_ubuntu安装qemu-CSDN博客 遇到的问题&#xff1a; (1)本来使用git clone https://github.com/qemu/qemu.git fatal: 无法访问 https://github.com/qemu/qemu.git/&#xff1a;GnuTLS recv error (-110): …

[阅读笔记18][CITING]LARGE LANGUAGE MODELS CREATE CURRICULUM FOR INSTRUCTION TUNING

这篇论文是23年10月提交到arxiv上的&#xff0c;也是用大模型蒸馏小模型的思路。 作者在这篇论文中提出了课程指令微调&#xff0c;大体流程如下图所示&#xff0c;教师模型给出一个问题&#xff0c;让学生模型回答一下&#xff0c;这时候学生回答大概率不够准确&#xff0c;这…