当前位置: 首页 > news >正文

每日速记10道java面试题13-MySQL篇

其他资料

每日速记10道java面试题01-CSDN博客

每日速记10道java面试题02-CSDN博客

每日速记10道java面试题03-CSDN博客

每日速记10道java面试题04-CSDN博客

每日速记10道java面试题05-CSDN博客

每日速记10道java面试题06-CSDN博客

每日速记10道java面试题07-CSDN博客

每日速记10道java面试题08-CSDN博客

每日速记10道java面试题09-CSDN博客

每日速记10道java面试题10-CSDN博客

每日速记10道java面试题11-CSDN博客

每日速记10道java面试题12-CSDN博客

目录

1.MySQL中的数据排序是怎么实现的?

2.那怎么去优化ORDER BY呢?

3.MySQL中的Change Buffer是什么?有什么作用?

 4.详细描述一下一条SQL语句在MySQL中的执行过程

5.MySQL的存储引擎有哪些?

6.MySQL的索引有哪些?

7.MySQLInnoDB 引擎中的聚集索引和非聚集索引有什么区别? 

8.MySQL索引的最左前缀匹配原则是什么?

9.MySQL的覆盖索引是什么?

10.MySQL的索引下推是什么?


1.MySQL中的数据排序是怎么实现的?

MySQL中的数据排序主要通过ORDER BY子句实现,其底层实现机制主要有两种方式:

使用索引排序:当ORDER BY子句中的列恰好有对应的索引时,MySQL可以直接利用索引来完成排序操作,这是最高效的排序方式。索引本身是有序的,所以MySQL只需要按照索引的顺序扫描即可得到排序后的结果。

文件排序(flesort):当无法使用索引进行排序时,MySQL会使用文件排序。这种方法会将需要排序的数据加载到内存中,然后在内存中进行排序。如果数据量较大,超过了系统变量 sort buffer size 的大小,还会使用临时文件来协助排序。

具体实现如下:

首先,MySQL会检查ORDER BY子句中的列是否有可用的索引,如果有可用的索引,MySQL会直接使用索引进行排序。如果没有可用的索引,MySQL会执行以下步骤:
1.从表中读取满足条件的所有行
2.对于每一行,只保存需要排序的列和可以唯一标识行的列(如主键)
3.使用快速排序算法在内存中对这些数据进行排序
4.如果数据量太大,会使用临时文件来辅助排序
5.根据排序结果回表查询所需的列

延伸→那怎么去优化ORDER BY呢?

2.那怎么去优化ORDER BY呢?

1.根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则
2.尽量使用覆盖索引
3.多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则(ASC/DESC)
4.如果不可避免的出现file sort,大数据量排序时,可以适当增大排序缓冲区大小sort_buffer_size(默认256K)   SQL语句:show variables like 'sort_buffer_size';

3.MySQL中的Change Buffer是什么?有什么作用?

Change Buffer ,更改缓冲区(针对于非唯一二级索引页),在执行 DML语句(增删改)时,如果这些数据Page 没有在Buffer Pool中,不会直接操作磁盘,而会将数据变更存在更改缓冲区Change Buffer 中,在未来数据被读取时,再将数据合并恢复到Buffer Pool中,再将合并后的数据刷新到磁盘中。

至于Buffer Pool是什么?可以去参考我的另一篇文章:MySQL数据表中的InnoDB引擎原理(存储结构+架构+事务原理+MVCC)_mysql innodb存储引擎实现原理-CSDN博客

 4.详细描述一下一条SQL语句在MySQL中的执行过程

1.当客户端的SQL发送到MySQL时,第一步是来到serve层的连接器,连接器会去验证身份和权限,因为你有连接数据库的权限不代表就有操作数据库的权限;

2.下一步就到了分析器进行SQL语法和词法分析,判断你这条SQL是什么类型的语句以及携带什么样的参数;

3.经过分析器之后就到了优化器,优化器会帮助我们选择使用哪个索引以及如果这条SQL涉及多表查询,优化器还会帮我们选择连表顺序;

4.最后到达执行器,执行器会操作存储引擎提供的接口并执行经过分析器分析以及优化器优化过后的SQL语句,并返回结果。

5.MySQL的存储引擎有哪些?

1.InnoDB:是Mysq!默认的存储引擎,支持事务,表级锁和粒度更小的行级锁,具有事务提交,回滚和数据崩溃恢复的功能
2. MyISAM: 是之前Mysql默认的存储引擎,不支持事务和行级锁,支持表级锁,锁的粒度较大,更新性能较差,更适合读多写少的场景
3.Memory:相较于InnoDB和MyISAM,Memroy是存在于内存中的,速度更快,但是不具有持久化的能力,适合临时存储的场景

6.MySQL的索引有哪些?

按索引的存储形式来分:聚集索引和二级索引

按索引的具体类型来分有:主键索引、唯一索引、常规索引、全文索引。

关于索引的其他只是可以参考我其他文章:深度解析MySQL数据库索引是什么?有什么用?怎么用?_mysql索引的使用和原理-CSDN博客

7.MySQLInnoDB 引擎中的聚集索引和非聚集索引有什么区别? 

 聚集索引:索引叶子节点存的是数据行,可以直接访问整条数据,而且一张表只有一个聚集索引,通常是主键索引。

非聚集索引:索引叶子节点存的是主键和对应的索引列,一般走非聚集索引,如果不是覆盖索引还有回去聚集索引再查一次数据,这个过程叫回表查询。

8.MySQL索引的最左前缀匹配原则是什么?

在使用联合索引时,查询条件必须从索引的最左侧开始匹配。如果一个联合索引包含多个列,查询条件必须包含第一个列的条件,然后是第二个列,以此类推。

具体例子可以看以下我的文章:

深度解析MySQL数据库索引是什么?有什么用?怎么用?_mysql索引的使用和原理-CSDN博客

9.MySQL的覆盖索引是什么?

MySQL 的覆盖索引(Covering lndex)是指二级索引中包含了查询所需的所有字段,从而使查询可以仅通过访问二级索引而不需要访问实际的表数据(主键索引)。,不需要回表查询,性能就会好很多。

10.MySQL的索引下推是什么?

索引下推是一种减少回表查询,提高查询效率的技术。它允许 MySQL 在使用索引查找数据时,将部分查询条件下推到存储引擎层过滤,从而减少需要从表中读取的数据行,减少了 IO(本该由 Server 层做操作,交由存储引擎层因此叫做“下推”)

简单来说就是:

如果没有索引下推,流程就是通过二级索引查到主键id后回表完再进行where条件过滤 

有索引下推,流程就是二级索引查到数据后直接where过滤一遍 再进行回表 减少回表的次数

其实就是回表前再过滤一下,这样子回表查询的时候少查了一些数据,提高效率。

相关文章:

每日速记10道java面试题13-MySQL篇

其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…...

乐鑫科技嵌入式面试题及参考答案(3万字长文)

嵌入式开发为什么用 C 语言,而不用 C++ 语言? 在嵌入式开发中,C 语言被广泛使用而 C++ 相对少用有以下一些原因。 首先,C 语言具有更高的效率。嵌入式系统通常资源受限,包括处理器速度、内存容量等。C 语言的代码生成效率高,能够生成紧凑的机器码,占用较少的内存空间和处…...

Leetcode 每日一题 56.合并区间

目录 问题描述 示例 示例 1 示例 2 问题分析 算法设计 步骤 1:排序 步骤 2:合并区间 步骤 3:返回结果 过题图片 代码实现 复杂度分析 题目链接 结语 问题描述 给定一个区间数组 intervals,其中每个区间由两个整数 s…...

【Vue】v-model、ref获取DOM

目录 v-moel v-model的原理 v-model用在组件标签上 方式 defineModel()简写 ref属性 获取原生DOM 获取组件实例 nextTick() v-moel v-model:双向数据绑定指令 数据变了,视图跟着变(数据驱动视图)视图变了,数…...

Python 类的设计(以植物大战僵尸为例)

关于类的设计——以植物大战僵尸为例 一、设计类需满足的三要素1. 类名2. 属性和方法 二、以植物大战僵尸的为例的类的设计1. 尝试分类2. 创建对象调用类的属性和方法*【代码二】*3. 僵尸的继承 三、代码实现 一、设计类需满足的三要素 1. 类名 类名:某类事物的名…...

python中权重剪枝,低秩分解,量化技术 代码

目录 python中权重剪枝,低秩分解,量化技术 代码 权重剪枝 低秩分解 scipy 量化技术 python中权重剪枝,低秩分解,量化技术 代码 权重剪枝 权重剪枝可以通过PyTorch的torch.nn.utils.prune模块实现。以下是一个简单的例子: import torch import torch.nn as nn impor…...

调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量

很多朋友在使用matlab时,会使用或自己编辑多个function函数,来满足自己对任务处理的要求,但是在调用function函数时,会出现这个问题:调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量…...

RabbitMQ七种工作模式之简单模式, 工作队列模式, 发布订阅模式, 路由模式, 通配符模式

文章目录 一. Simple(简单模式)公共代码:生产者:消费者: 二. Work Queue(工作队列模式)公共代码:生产者:消费者1, 消费者2(代码相同): 三. Publish/Subscribe(发布/订阅模式)公共代码:生产者:消费者: 四. Routing(路由模式)公共代码:消费者: 五. Topics(通配符模式)公共代码:生…...

Win10安装kafka并用C#调用

kafka安装 jdk、kafka版本如下,zookeeper使用kafka自带版本 安装包下载位置:https://download.csdn.net/download/henreash/90087368 (赚点csdn下载资源分) 安装jdk后,解压kafka压缩包,修改配置文件: kafka_2.13-3.9.0\config\…...

高级架构二 Git基础到高级

一 Git仓库的基本概念和流程 什么是版本库?版本库又名仓库,英文名repository,你可以简单的理解一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除,Git都能跟踪,以便任何…...

深入解析二叉树算法

引言 二叉树(Binary Tree)作为数据结构中的一种重要形式,在计算机科学的诸多领域中得到了广泛应用。从文件系统到表达式解析,再到搜索和排序,二叉树都扮演着关键角色。本文将从二叉树的基础概念出发,详细探讨其各种算法及其应用,并提供相关代码示例,旨在为读者建立扎实…...

如何解决maven项目使用Ctrl + /添加注释时的顶格问题

一、问题描述 相信后端开发的程序员一定很熟悉IDEA编译器和Maven脚手架,使用IDEA新建一个Maven工程,通过SpringBoot快速构建Spring项目。在Spring项目pom.xml文件中想添加注释,快捷键Ctrl /,但是总是顶格书写。 想保证缩进统一…...

总结的一些MySql面试题

目录 一:基础篇 二:索引原理和SQL优化 三:事务原理 四:缓存策略 一:基础篇 1:定义:按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享 的…...

渤海证券基于互联网环境的漏洞主动防护方案探索与实践

来源:中国金融电脑 作者:渤海证券股份有限公司信息技术总部 刘洋 伴随互联网业务的蓬勃发展,证券行业成为黑客进行网络攻击的重要目标之一,网络攻击的形式也变得愈发多样且复杂。网络攻击如同悬于行业之上的达摩克利斯之剑&…...

用Go语言重写Linux系统命令 -- nc简化版

用Go语言重写Linux系统命令 – nc简化版 1. 引言 netcat,简称 nc,被誉为网络工具中的“瑞士军刀”,是网络调试与分析的利器。它的功能十分强大,然而平时我们经常使用的就是他的连通性测试功能,但是nc是被设计用来测试…...

面试复盘 part 02·1202-1207 日

作品集讲述部分 分析反思 作品集讲述部分,视觉讲述部分需要更换,需要换成其他视觉相关的修改 具体话术 这是一个信息展示优化方案,用户为财务,信息区分度不足,理解成本较高,因此选择需要降低理解成本。…...

Linux评估网络性能

网络性能直接影响应用程序对外提供服务的稳定性和可靠性 ping命令检测网络的连通性 如果网络反应缓慢,或连接中断,可以用ping来测试网络的连通情况 time值(单位为毫秒)显示了两台主机之间的网络延时情况。如果此值很大,则表示网络的延时很大…...

实战ansible-playbook(四) -文件操作重定向/追加

原始命令: ----------阶段1--------------- apt-get update -y apt install nano vim iputils-ping net-tools dialog gcc apt-utils make -y systemctl stop unattended-upgradessystemctl disable unattended-upgradesecho APT::Periodic::Update-Package-Lists "1&qu…...

简单题:1.两数之和

题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 要求: 可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素…...

RTCMultiConnection 跨域问题解决

js套件地址 https://github.com/muaz-khan/RTCMultiConnection server套件地址 https://github.com/muaz-khan/RTCMultiConnection-Server 要解决的就是server代码的跨域问题 原装写法: 解决写法: // 喜欢组合语法的自己组 const io new ioServer.S…...

Cursor编辑器深度美化:CSS注入与动态特效实现全解析

1. 项目概述:当代码编辑器拥有了“皮肤”与“特效”如果你和我一样,每天有超过8小时的时间是在代码编辑器里度过的,那么你一定理解一个顺眼、顺手、甚至有点“酷”的编辑环境意味着什么。它不仅仅是生产力的工具,更是我们开发者思…...

信号处理库mattbaconz/signal:实现优雅停机与进程通信的跨平台解决方案

1. 项目概述:一个信号处理与通信的瑞士军刀最近在GitHub上看到一个挺有意思的项目,mattbaconz/signal。光看名字,你可能会联想到那个知名的加密通讯应用,但点进去你会发现,这是一个完全不同的技术世界。这是一个由开发…...

从方程到应用:激光雷达核心参数与激光器选型指南

1. 激光雷达方程:从数学公式到物理意义 第一次接触激光雷达方程时,我也被那一堆希腊字母和下标搞得头晕眼花。但后来发现,这个看似复杂的方程其实就像买菜算账一样简单直白。激光雷达方程本质上是个"能量收支平衡表",它…...

如何提升SQL存储过程逻辑复用_封装通用存储过程函数

SQL Server无函数式存储过程,需用标量函数(单值计算)或表值函数(结果集)替代;标量函数禁用DML和非确定性函数,ITVF性能优于MSTVF;MySQL函数须声明DETERMINISTIC等属性;跨…...

企业级浏览器自动化测试架构设计:Chrome for Testing的高可用解决方案与实践指南

企业级浏览器自动化测试架构设计:Chrome for Testing的高可用解决方案与实践指南 【免费下载链接】chrome-for-testing 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-for-testing Chrome for Testing是Google ChromeLabs团队为解决浏览器自动化测试…...

电路设计效率革命:Draw.io电子工程库的专业绘图方案

电路设计效率革命:Draw.io电子工程库的专业绘图方案 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.com/gh_mirrors/…...

实测taotoken多模型聚合端点的响应延迟与稳定性表现

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 实测taotoken多模型聚合端点的响应延迟与稳定性表现 作为开发者,在将大模型能力集成到应用时,除了功能本身…...

如何在FF14中实现三倍效率的钓鱼体验?智能计时助手完全解析

如何在FF14中实现三倍效率的钓鱼体验?智能计时助手完全解析 【免费下载链接】Fishers-Intuition 渔人的直感,最终幻想14钓鱼计时器 项目地址: https://gitcode.com/gh_mirrors/fi/Fishers-Intuition 在《最终幻想14》的广阔世界中,钓鱼…...

别再手动数脉冲了!用STM32定时器编码器模式搞定增量编码器(附CubeMX配置)

STM32硬件编码器模式实战:精准捕获增量编码器信号的工程指南 在电机控制、机器人关节定位和精密测量系统中,增量式编码器作为核心反馈元件,其信号处理质量直接影响整个系统的控制精度。传统的中断计数方式在高速脉冲场景下往往捉襟见肘&#…...

B站成分检测器:3秒洞察评论区用户真实身份的智能工具

B站成分检测器:3秒洞察评论区用户真实身份的智能工具 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分,支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker 在B站…...