面试问答之MySQL数据库进阶

文章目录

  • 🐒个人主页:信计2102罗铠威
  • 🏅JavaEE系列专栏
    • 📖前言:
    • 🎀 MySQL架构
    • 🐕数据库引擎
      • 🐕 InnoDB存储存储引擎
      • 🐕MYISAM
    • 🏨索引
      • 🐕哪些情况需要创建索引?
      • 🐕哪些情况不要创建索引
      • 🐕索引的分类
        • 🪀组合索引的最左前缀原则
    • 🐕 索引的数据结构(为什么使用到B+树?)
      • 🐕聚簇索引和非聚簇索引
    • 🏨事务的特性ACID
      • 🦓事务的隔离级别
      • 🪀事务的实现原理
      • 🪀隔离级别的实现原理 MV CC (多版本并发控制 Multi-Version Concurrent Control)
      • 🪀数据库中的锁
    • 🎀SQL优化

🐒个人主页:信计2102罗铠威

🏅JavaEE系列专栏

📖前言:

本篇博客主要总结MySQL数据库面试中常问的考察点

🎀 MySQL架构

大致可以分为四层:

  1. 连接层: 负责接收客户端的连接服务请求、进行授权认证
  2. 服务层: 接收SQL语句,对SQL进行解析、优化、缓存,使用触发器,存储过程,函数,DML,DDL语句
  3. 引擎层 :是真正具体实现的数据存储方式,不同的存储引擎特点不同
  4. 物理文件存储层: 使用各种文件用来存储数据 ,以及各种日志文件。例如undo.log 、redo.log 文件

🐕数据库引擎

在这里插入图片描述

🐕 InnoDB存储存储引擎

支持事务,行级锁(并发量大),有外键约束,支持全文索引,支持缓存,
支持主键自增,容量大。不存储表的总行数,需要sql逐行统计

🐕MYISAM

不支持事务,不支持外键,不支持行锁,只有表锁(并发量小),表空间小。
支持全文索引,存储了表的总行数,统计速度快。适合查询多。增删改较少的场景。

🏨索引

是类似于字典的目录索引,可以快速定位数据真实的位置,是排好序的,方便快速查找的数据结构(B+树)
优点:可快速定位数据的位置,减少磁盘I/O的次数,可以通过索引列进行分组、排序、查询,提高了查询效率。
缺点:索引需要额外的存储空间,每次修改数据还需要维护更新索引树,需要消耗时间。

🐕哪些情况需要创建索引?

  1. 主键会自动创建索引
  2. 频繁作为查询条件的列
  3. 查询中与其他表关联的列,外键需要创建
  4. 查询在排序的列,(若建立索引将等待提高排序速度)
  5. 分组中的字段

🐕哪些情况不要创建索引

  1. 列中出现很多重复值
  2. 表记录太少
  3. 经常进行增删改的表不建议(需要频繁维护索引树)
  4. 经常不作为查询条件的字段

🐕索引的分类

在这里插入图片描述
在这里插入图片描述

🪀组合索引的最左前缀原则

列如表中有 a,b,c 3 列,组合索引(a,b),非索引列c ,筛选条件必须包含左边第一列a,否则索引不生效

select * from table where a=’’and b=’’索引生效
select * from table where b=’’and a=’’索引生效
select * from table where a=’’and c=’’索引生效
select * from table where b=’’and c=’’索引不生效

🐕 索引的数据结构(为什么使用到B+树?)

由于要存储很多数据并要求尽可能少的查询次数,所以选择树 的数据结构。
如果是二叉树,高度还是有点高,所以使用多叉树
但是添加数据可能会出现不平衡的情况,左子树为空,右子树很多数据。所以使用自平衡的多路查找树 B-树。
MySQL又根据经常范围查询、和性能上的改进,将B-树,改进成B+树.
B-树是每个节点都存储数据,高度是平衡的。
B+树是非叶子节点只存储索引,真实的数据存储在叶子节点上,并且叶子节点维护了一个双向链表,支持范围查询。
在这里插入图片描述

🐕聚簇索引和非聚簇索引

主要看是否可以直接找到,是否需要回表查询。
聚簇索引:找到了索引,就找到了数据。Innodb中主键索引(一级索引)。

非聚簇索引 Innodb中也存在非聚簇索引,二级索引(除主键外的列)会2先找到主键,再根据主键来找到数据。在这里插入图片描述
数据库事务:在一次执行中,可能包含了多条sql语句,这些指令必须同时提交成功,或者失败回滚。不允许其他线程或事务进行干扰。MYISAM不支持事务,只有Innodb引擎才支持事务。

🏨事务的特性ACID

原子性:不可分割,一气呵成,不受其他事务干扰
隔离性:事务具有独立性,允许多个并发事务同时对数据进行读写的能力(读未提交,读已提交,可重复读,串行化)
持久性:事务一旦提交,将记录在硬盘上做到永久性保存。
一致性:数据经过多次操作,结果与预期相符,保证数据完整性。

🦓事务的隔离级别

就是对数据共享的开放程度
“读未提交”:一个事务可以读取到另一个事务未提交的修改。
缺陷:会造成脏读、幻读、不可重复读问题。解决办法:改成“读已提交”
“读已提交”:B事务读到了A事务已经提交的事务。解决了“脏读”问题
缺陷:仍然有“幻读”、不可重复读问题
“可重复读”:(默认隔离级别)B事务在开启后的两次查询中,两次查询结果是相同的,解决了“不可重复读”
缺陷:还有“幻读”问题
“串行化”:只有一个事务操作,加锁了,哪怕是查询操作也得等,解决一切问题,但效率最低。

🪀事务的实现原理

原子性和隔离性 :依靠undo log(回滚日志)保存每次操作的反向操作,实现回滚的

  • 例如:我们执行insert语句,undo log日志中保存对应的delete语句
    持久性:每当执行修改数据的操作时,先会将语句保存到redo log(重做日志)中,即使突然断电,正常后也可以从redo log日志中恢复数据

🪀隔离级别的实现原理 MV CC (多版本并发控制 Multi-Version Concurrent Control)

对于 “读已提交”:在同一个事务中实时访问到最新的数据,每次读时,都会给最新的版本链拍照,所以读到的数据是最新的
对于 “可重复读”:在一个事务中,第一次查询的结果与第二次查询的结果保持一致,在第一次查询的时候,会给当前版本链拍个数据快照,下次查询时,找到当初的版本链读数据。
使用隔离级别机制,为了实现并发的读写、写读,来提高并发效率

🪀数据库中的锁

按锁的粒度划分:行锁、间隙锁、表锁
行锁:Innodb引擎默认,对一行加锁,锁冲突概率低,并发度高
间隙锁:对某一区间加锁,区间可不连续
表锁:MYISAM引擎默认,对整个表加锁,锁冲突概率高,并发度低
按锁的工作状态划分:共享锁(读锁)、排他锁(写锁)
在这里插入图片描述

🎀SQL优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

景联文科技:专业提供高质量大语言模型训练数据

2024年,数字经济被再次写入政府工作报告中,报告指出要深化大数据、人工智能等研发应用,打造具有国际竞争力的数字产业集群。 大模型作为生成式人工智能的基础,日益成为国际科技竞争的焦点。人大代表杨剑宇指出,尽管我国…

008-slot插槽

slot插槽 1、插槽 slot 的简单使用2、插槽分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&…

老阳分享:视频号带货的四大技巧

视频号带货作为新兴的电商模式&#xff0c;在微信这个庞大的社交平台上展现出了巨大的潜力。要想在视频号带货领域取得成功&#xff0c;需要掌握一定的技巧。本文将为您详细解析视频号带货的四大技巧&#xff0c;感兴趣的朋友一起去看看吧。 一、内容创新 内容创新是视频号带货…

【深度学习笔记】5_11 残差网络ResNet

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.11 残差网络&#xff08;ResNet&#xff09; 让我们先思考一个问题&#xff1a;对神经网络模型添加新的层&#xff0c;充分训练后的…

springboot项目集成,项目流程概述

一、项目介绍 二、项目设计原则 2.1整体原则 2.2持久层 2.3业务逻辑层 具体分析 三、实战 3.1项目搭建 <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-crypto</artifactId></dependency>&l…

双链表的实现(数据结构)

链表总体可以分为三大类 一、无头和有头 二、单向和双向 三、循环和不循环 从上面分类得知可以组合成8种不同类型链表&#xff0c;其中单链表最为简单&#xff0c;双联表最为复杂&#xff0c;两种链表都实现后其余链表都不成问题。 我们前期博客已将完成了单向无头不循环链表…

基于PHP的景点数据分析系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 关键理论与技术 3 1.1 框架技术 3 1.1.1 QueryList 3 1.1.2 ThinkPHP 3 1.1.3 Amaze UI 3 1.2 数据可视化技术 4 1.3 数据库技术 4 1.4 本章小结 4 2 需求分析 5 2.1 业务流程分析 5 2.2 功能需求分析 5 2.3 用例分析 7 2.4 非功能性需求…

it-tools工具箱

it-tools 是一个在线工具集合&#xff0c;包含各种实用的开发工具、网络工具、图片视频工具、数学工具等 github地址&#xff1a;https://github.com/CorentinTh/it-tools 部署 docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:lat…

yolov8多batch推理,nms后处理

0. 背景 在高速公路监控视频场景下&#xff0c;图像分辨率大都是1920 * 1080或者2560 * 1440&#xff0c;远处的物体&#xff08;车辆和行人等&#xff09;都比较小。考虑需要对图像进行拆分&#xff0c;然后把拆分后的数据统一送入模型中&#xff0c;推理的结果然后再做nms&am…

【微前端乾坤】 vue2主应用、vue2+webpack子应用,vue3+webpack子应用、vue3+vite子应用的配置

因公司需求 需要将原本vue2iframe 形式的项目改成微前端乾坤的方式。 之前iframe都是直接嵌套到vue2项目的二级目录或者三级目录下的(反正就是要随处可嵌) 用乾坤的原因&#xff1a; 1、iframe嵌套的方式存在安全隐患&#xff1b; 2、项目是联合开发的&#xff0c; 乾坤的方便…

Hack The Box-Crafty

目录 信息收集 rustscan whatweb WEB 漏洞利用 漏洞说明 漏洞验证 提权 get user.txt get Administrator 总结 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -a 10.10.11.249 --range0-65535 --ulimit5000 -- -A -sC [~] Automatically…

NLP:自定义模型训练

书接上文&#xff0c;为了完成指定的任务&#xff0c;我们需要额外训练一个特定场景的模型 这里主要参考了这篇博客&#xff1a;大佬的博客 我这里就主要讲一下我根据这位大佬的博客一步一步写下时&#xff0c;遇到的问题&#xff1a; 文中的cfg在哪里下载&#xff1f; 要不…

Fastjson漏洞利用合集

0x01 Fastjson 概述 1.应用场景 接口返回数据 Ajax异步访问数据RPC远程调用前后端分离后端返回的数据开放API(一些公司开放接口的时候&#xff0c;我们点击请求&#xff0c;返回的数据是JSON格式的)企业间合作接口(数据对接的时候定义的一种规范&#xff0c;确定入参&#x…

BUUCTF-MISC-[HDCTF2019]信号分析1

题目链接&#xff1a;BUUCTF在线评测 (buuoj.cn) 下载附件是一个WAV的文件&#xff0c;题目又叫做信号分析&#xff0c;用Adobe Audition 打开分析了 发现有很多长短不一样的信号&#xff0c;只需要分析一段 猜测长的是一短的为0 最后得到0101010101010101000000110 百度得知…

vscode如何远程到linux python venv虚拟环境开发?(python虚拟环境、vscode远程开发、vscode远程连接)

文章目录 1. 安装VSCode2. 安装扩展插件3. 配置SSH连接4. 输入用户名和密码5. 打开远程文件夹6. 创建/选择Python虚拟环境7. 安装Python插件 Visual Studio Code (VSCode) 提供了一种称为 Remote Development 的功能&#xff0c;允许用户在远程系统、容器或甚至 Windows 子系统…

【致逝去的青春】《龙珠》作者鸟山明逝世,享年68岁

鸟山明工作室&#xff08;BIRD STUDIO&#xff09;于3月8日发布讣告&#xff1a;鸟山明已于2024年3月1日因急性硬膜下血肿逝世&#xff0c;享年68岁。 《龙珠》从 1984 年开始于《周刊少年Jump》连载&#xff0c;过后曾改编曾多部动画、剧场版、游戏&#xff0c;相关周边商品也…

opengl 学习(二)-----你好,三角形

你好&#xff0c;三角形 分类demo效果解析 分类 opengl c demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>using namespace std;/** * 在学习此节之前&#xff0c;建议将这…

Alveo 概念拓扑结构

在 Alveo 加速卡中,涉及到的概念拓扑结构主要包括 Alveo 卡上的各个关键组件以及与主机系统之间的通信结构。以下是对这些概念拓扑结构的简要介绍: 1.DDR 即双数据率内存(Double Data Rate memory),是一种常见的计算机内存类型,用于存储和提供处理器所需的数据和指令。…

macos m1 arm芯片 使用jpype报错 FileNotFoundError: [Errno 2] JVM DLL not found

startJVM(jpype.getDefaultJVMPath()) 报错 Traceback (most recent call last):File "/Users/thomas990p/PycharmProjects/tuya/volcano-biz-scripts/WenKongFa/FinalCode/java2python/CallJavaAPI.py", line 12, in <module>startJVM(jpype.getDefaultJVMPa…

基于springboot实现大学生兼职网站系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现大学生兼职系统演示 摘要 现代化的市场中&#xff0c;人们日常的工作、生活都在不断的提速&#xff0c;而人们在工作与生活中与互联网的结合也越来越紧密&#xff0c;通过与互联网紧密的结合可以更好地实现日常工作的线上化、信息化、便捷化。现如今的各行各…