MySQL高级面试题整理
1. 执行流程
- mysql客户端先与服务器建立连接
- Sql语句通过解析器形成解析树
- 再通过预处理器形成新解析树,检查解析树是否合法
- 通过查询优化器将其转换成执行计划,优化器找到最适合的执行计划
- 执行器执行sql
2. MYISAM和InNoDB的区别
- MYISAM:不支持外键、不支持事务、表锁
- InNoDB:支持外键、支持事务、行锁
3. 什么是索引
- 索引是数据结构
- 索引的目的是提高查询效率
4. 索引的优劣势
- 优势:提高数据检索的效率、降低数据排序和分组的成本
- 劣势:降低更新表的速度、占用空间
5. 聚簇索引与非聚簇索引
- 聚簇索引:叶子结点存储的是行数据
- 非聚簇索引:叶子结点存储的是物理地址值,访问数据总是需要二次查找(回表)
6. MySQL索引分类
- 按功能逻辑分:主键索引、唯一索引、全文索引、普通索引
- 按物理实现方式分:聚簇索引、非聚簇索引
- 按作用字段分:单列索引、联合索引
- 主键索引:设定为主键后数据库会自动建立索引
- 单值索引:一个索引只包含单个列
- 唯一索引:索引列的值唯一,可以为空
- 复合索引:一个索引包含多个列
7. 不同的存储引擎支持的索引类型
- InNoDB:支持B-tree、Full-text,不支持Hash索引
- MyISAM:支持B-tree、Full-text,不支持Hash索引
- Archive:不支持B-tree、Full-text,Hash索引
- NDB:支持Hash索引,不支持B-tree、Full-text
- Memory:支持B-tree、Hash索引,不支持Full-text索引
8. 创建索引
- 隐式创建:有主键约束、唯一性约束、外键约束的字段会自动创建索引
- 显示创建:create Table table_name Index index_name
9. 查看索引
- 方式一:show create table 表名;
- 方式二:show index from 表名;
10. 适合创建索引的11种情况
- 字段的数值有唯一性的限制
- 频繁作为where查询条件的字段
- 经常使用group by和order by 的列
- update、delete的where条件列
- distinct字段需要创建索引
- 多表联查时,创建索引的注意事项:第一,连接表的数量尽量不要超过三张;第二,对where条件创建索引;第三,对连接的字段创建索引
- 使用列的类型小的创建索引
- 使用字符串前缀创建索引
- 使用区分度高的创建索引
- 联合索引中使用最频繁的列放到联合索引的左侧
- 在多个字段都需要创建索引的情况下,联合索引优于单值索引
11. 限制索引的数目:单表的索引尽量不要超过6个
- 索引需要占用磁盘空间,需要维护
- 索引会影响insert,update,delete等语句的性能‘
- 优化器在选择执行计划时,如果有多个索引可以用,会增加优化器生成执行计划,降低查询效率
12. 不适合创建索引的情况
- 在where中使用不到的字段不建议建立索引
- 数据量小的表不建议建立索引
- 字段有大量重复的数据(重复率达到百分之10)不建议建立索引
- 经常更新的表不建议建立索引
- 无序的字段不建议建立索引(例如身份证)
- 不经常使用的索引建议删除
- 不要定义冗余或者重复的索引
13. explain的四种格式
- 传统格式:输出是表格形式
- JSON格式:输出信息最详细的格式,包含了执行的成本信息
- TREE格式:描述各个部分之间的关系和各个部分的执行顺序
- 可视化输出:
14. explain各字段含义
- select_type:区别普通查询、联合查询、子查询
- table:查询的表名
- type:all--->index--->range--->ref--->eq_ref--->const
- key:当前查询实际使用的索引
- key_len:索引中使用到的字节数,可以算出具体使用了索引中的哪些列
- ref:显示索引的那一列被使用
- rows:执行查询时必须检查的行数
- extra:不适合在其他列中显示但十分重要的额外信息
15. extra:
- Using filesort:使用了非索引字段排序
- Using temporary:临时表、根据非索引字段进行分组
- Using index:使用索引字段进行了查询
- Using where:使用where进行了过滤
- Using join buffer:使用了缓存,非主键缓存
- impossible where:where子句的值总是false
16. 索引失效的10种情况
- 在使用联合索引不满足最左匹配原则
- 使用了select *
- 索引列上有计算
- 索引列上用了函数
- 字段类型不同
- like查询条件中左边包含%
- 列对比
- 使用or关键字:or关键字连接的字段都要建立了索引则不会失效,否则索引失效
- not in,not exists使用在非主键字段会导致索引失效
- order by后没有where和limit条件,满足最左匹配原则但是多个字段的排序规则不同
17. 索引优化
- 物理查询优化:通过索引和表连接方式优化
- 逻辑查询优化:通过SQL等价变换提升查询效率
18. 范式的种类
- 第一范式(1NF):数据表中每个字段必须满足原子性
- 第二范式(2NF):满足第一范式、必须有主键、非主键字段必须完全依赖主键;
- 第三范式(3NF):满足第二范式、非主键字段只和主键字段直接关联(即非主键字段不能依赖于其他非主键字段)
- 巴斯-科德范式(BCNF):满足第三范式、并且只有一个候选键
- 第四范式(4NF):
- 第五范式(5NF,又称完美范式):
19. 如何定位调优问题
- 用户的反馈
- 日志分析
- 服务器资源使用监控
- 数据库内部状态监控
20. 优化MySQL的参数
- innodb_buffer_pool_size:innoDB类型的表和索引的最大缓存
- Key_buffer_size:索引缓冲区的大小
- table_cache:同时打开表的个数
- quert_cache_size:查询缓冲区的大小
21. 事务的原子性、一致性和持久性由事务的redo和undo日志保证
- redo日志:重做日志,提供再写入操作
- undo日志:回滚日志,回滚到某个记录版本
相关文章:
MySQL高级面试题整理
1. 执行流程 mysql客户端先与服务器建立连接Sql语句通过解析器形成解析树再通过预处理器形成新解析树,检查解析树是否合法通过查询优化器将其转换成执行计划,优化器找到最适合的执行计划执行器执行sql 2. MYISAM和InNoDB的区别 MYISAM:不支…...
【Java】面向对象三大基本特征
【Java】面向对象三大基本特征 1.封装 On Java 8:研发程序员开发一个工具类,该工具类仅向应用程序员公开必要的内容,并隐藏内部实现的细节。这样可以有效地避免该工具类被错误的使用和更改,从而减少程序出错的可能。彼此职责划分清晰&#x…...

蓝桥杯C++组怒刷50道真题(填空题)
🌼深夜伤感网抑云 - 南辰Music/御小兮 - 单曲 - 网易云音乐 🌼多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 18~22年真题,50题才停更,课业繁忙,有空就更,2023/3/18/23:01写下 目录 👊填…...
Shell自动化管理 for ORACLE DBA
1.自动收集每天早上9点到晚上8点之间的AWR报告。 auto_awr.sh #!/bin/bash# Set variables ORACLE_HOME/u01/app/oracle/product/12.1.0/dbhome_1 ORACLE_SIDorcl AWR_DIR/home/oracle/AWR# Set date format for file naming DATE$(date %Y%m%d%H%M%S)# Check current time - …...

Unity学习日记13(画布相关)
目录 创建画布 对画布的目标图片进行射线检测 拉锚点 UI文本框使用 按钮 按钮导航 按钮触发事件 输入框 实现单选框 下拉菜单 多选框选项加图片 创建画布 渲染模式 第一个,保持画布在最前方,画布内的内容显示优先级最高。 第二个,…...

初阶C语言:冒泡排序
冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。1.冒泡排序关于冒泡排序我们在讲…...

带头双向循环链表
在前面我们学习了单链表,发现单链表还是有一些不够方便,比如我们要尾插,需要遍历一遍然后找到它的尾,这样时间复炸度就为O(N),现在我们引入双向带头链表就很方便了,我们先看看它的结构。通过观察,我们发现一…...

C#中的DataGridView中添加按钮并操作数据
背景:最近在项目中有需求需要在DataGridView中添加“删除”、“修改”按钮,用来对数据的操作以及显示。 在DataGridView中显示需要的按钮 首先在DataGridView中添加需要的列,此列是用来存放按钮的。 然后在代码中“画”按钮。 if (e.Column…...
WEB安全 PHP基础
WEB安全 PHP基础 PHP简述 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。 在一个php文件中可以包括以下内容: PHP 文件可包含文本、HTML、…...

基础篇:07-Nacos注册中心
1.Nacos安装部署 1.1 下载安装 nacos官网提供了安装部署教程,其下载链接指向github官网,选择合适版本即可。如访问受阻可直接使用以下最新稳定版压缩包:📎nacos-server-2.1.0.zip,后续我们也可能会更改为其他版本做更…...

端口镜像讲解
目录 端口类型 镜像方向 观察端口位置 端口镜像实现方式 流镜像 Vlan镜像 MAC镜像 配置端口镜像 配置本地观察端口 配置远程流镜像(基于流镜像) 端口镜像是指将经过指定端口的报文复制一份到另一个指定端口,便于业务监控和故障定位…...

图形视图框架QGraphicsScene(场景,概念)
QGraphicsScene 该类充当 QGraphicsItems 的容器。它与 QGraphicsView 一起使用,用于在 2D 表面上可视化图形项目,例如线条、矩形、文本甚至自定义项目。 QGraphicsScene具有的功能: 提供用管理大量数据项的高速接口传播事件到每一个图形项…...
ChatGPT 拓展资料: 强化学习-SARSA算法
强化学习是一种机器学习技术,它关注的是在特定环境中,如何最大化一个智能体(agent)的累积奖励(reward)。强化学习算法会根据当前状态和环境的反馈来选择下一个动作,不断地进行试错,从而优化智能体的行为。 SARSA是一种基于强化学习的算法,它可以用于解决马尔可夫决策…...

SpringJDBC异常抽象
前言spring会将所有的常见数据库的操作异常抽象转换成他自己的异常,这些异常的基类是DataAccessException。DataAccessException是RuntimeException的子类(运行时异常),是一个无须检测的异常,不要求代码去处理这类异常SQLErrorCodeSQLExcepti…...
我在字节的这两年
前言 作为脉脉和前端技术社区的活跃分子,我比较幸运的有了诸多面试机会并最终一路升级打怪如愿来到了这里。正式入职时间为2021年1月4日,也就是元旦后的第一个工作日。对于这一天,我印象深刻。踩着2020年的尾巴接到offer,属实是过了一个快乐…...
Button(按钮)与ImageButton(图像按钮)
今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节只对Button进行讲解,另外Button是TextView的子类,所以TextView上很多属性也可以应用到B…...
Chrome插件开发-右键菜单开启页面编辑
开发一个执行js脚本改变页面DOM的Chrome插件,manifest_version版本为3。 Chrome插件基本知识 Chrome插件通常由以下几部分组成: manifest.json 该文件为必须项,其它文件都是可选的。该文件相当于插件的meta信息,包含manifest版…...

指针进阶(上)
内容小复习🐱: 字符指针:存放字符的数组 char arr1[10]; 整型数组:存放整型的数组 int arr2[5]; 指针数组:存放的是指针的数组 存放字符指针的数组(字符指针数组) char* arr3[5]; 存放整型指针的数组(整型指针数组) int* arr[6]; 下面进入学习了哦~&…...

Python每日一练(20230318)
目录 1. 排序链表 ★★ 2. 最长连续序列 ★★ 3. 扰乱字符串 ★★★ 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 排序链表 给你链表的头结点 head ,请将其按 升序 …...

多层多输入的CNN-LSTM时间序列回归预测(卷积神经网络-长短期记忆网络)——附代码
目录 摘要: 卷积神经网络(CNN)的介绍: 长短期记忆网络(LSTM)的介绍: CNN-LSTM: Matlab代码运行结果: 本文Matlab代码数据分享: 摘要: 本文使用CNN-LSTM混合神经网…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...