面试问答之MySQL数据库进阶

news2024/11/15 17:45:06

文章目录

  • 🐒个人主页:信计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.coloradmin.cn/o/1500098.html

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

相关文章

学习c语言:预处理详解(宏定义)

1.预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&…

Docker镜像及Dockerfile详解

1 Docker镜像用途 统一应用发布的标准格式支撑一个Docker容器的运行 2 Docker镜像的创建方法 基于已有镜像创建基于本地模板创建基于Dockerfile创建 (实际环境中用的最多) 2.1 基于已有镜像的创建 将容器里面运行的程序及运行环境打包生成新的镜像 …

盘点美貌与个性兼备的国漫女神,她们绝不是花瓶!

在近年来的影视作品里,女性角色不再只是简单的陪衬或是花瓶,她们以各具特色的形象,展现了独立、坚韧和多元的女性力量。而在二次元的世界里,众多女角色同样散发着耀眼的光芒。正值国际妇女节,一起来看看国漫中那些兼具…

新能源车高压线束更换VR虚拟互动教学保障了培训安全可控

随着新能源汽车市场的快速发展,对于新能源汽车检修人才的需求也日益增长。然而,传统的培训模式往往存在一些限制,如培训周期长、成本高、实践机会少等。为了解决这些问题,新能源车检修VR互动培训应运而生,成为一种创新…

分享MDN前端结构化技能、实践指南、学习资源

前言 MDN课程为成为一名成功的前端开发人员提供了一个结构化的基本技能和实践指南,以及推荐的学习资源。 先看下让人不得不服的书《宝宝的网页设计》(套装共3册) 宝宝的HTML、宝宝的CSS、宝宝的JavaScript 全球首套中英文宝宝编程启蒙书&a…

文献学习-14-一种用于高精度微创手术的纤维机器人

Authors: Mohamed E. M. K. Abdelaziz1,2 †, Jinshi Zhao1,3 †, Bruno Gil Rosa1,2 , Hyun-Taek Lee4 , Daniel Simon3,5 , Khushi Vyas1,2 , Bing Li6,7 , Hanifa Koguna3 , Yue Li1 , Ali Anil Demircali3 , Huseyin Uvet8 , Gulsum Gencoglan9,10, Arzu Akcay11,12, Moham…

WinCE USB驱动架构及术语明析

一、层式驱动的概念。 WinCE驱动多为层式驱动,分为MDD和PDD两层。 MDD包含通用的驱动代码,向操作系统提供了驱动接口,该层代码调用PDD功能访问硬件。 PDD部分包含与硬件平台相关的特殊代码,不具有通用性。 之所以要分层&#xff0…

050-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

050-WEB攻防-PHP应用&文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒 #知识点: 1、文件包含-原理&分类&危害-LFI&RFI 2、文件包含-利用-黑白盒&无文件&伪协议 演示案例: ➢文件包含-原理&分类&am…

C语言从入门到精通 第十一章(文件操作)

写在前面: 本系列专栏主要介绍C语言的相关知识,思路以下面的参考链接教程为主,大部分笔记也出自该教程。除了参考下面的链接教程以外,笔者还参考了其它的一些C语言教材,笔者认为重要的部分大多都会用粗体标注&#xf…

C++ Qt开发:QFileSystemModel文件管理组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFileSystemModel组件实现文件管理器…

HelpLook 和 confluence:创建知识库我选HelpLook

企业要想快速创建知识库,最好的方法就是利用好工具。而市面上创建知识库的平台多而繁杂,无法在最快时间内判断哪一个是最适合企业解决问题的。HelpLook和confluence功能相似,多数人无法判断并做出最佳选择,今天就跟着LookLook同学…

1688商品详情数据丨工厂详情数据丨店铺详情数据

1688商品详情数据、工厂详情数据以及店铺详情数据是商家在阿里巴巴1688平台上进行运营和决策的重要参考。这些数据涵盖了商品的详细信息、工厂的生产能力和信誉情况,以及店铺的经营状况和口碑评价,为商家提供了全方位的市场洞察和竞争优势。 请求示例&a…

Flutter学习9 - http 中 get/post 请求示例

1、配置 http pubspec.yaml dependencies:http: ^0.13.4flutter:sdk: flutterhttp 库最新插件版本查看:https://pub.dev/packages/http不一定要用最新版本 http,要使用项目所能支持的版本 .dart import package:http/http.dart as http;2、示例 &a…

基于UDP实现直播间聊天的功能

需求:软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责:1.接收用户的昵称2.接收用户输入的信息,能够将信息发送给服务端3.接收服务端回复的数据信息,并完成显示主播服务端负责:1.对所有加入直播间的用…

基于uniapp cli项目开发的老项目,运行报错path.replace is not a function

项目:基于uniapp cli的微信小程序老项目 问题:git拉取代码,npm安装包时就报错; cnpm能安装成功包,运行报错 三种方法尝试解决: 更改代码,typeof pathstring的话,才走path.replace…

mysql的语法总结2

命令: mysql -u 用户名 -p mysql登录 命令:create database u1 创建数据库u1 查询数据库 使用数据库u1 创建表department 查询表department ALTER TABLE 表名 操作类型; 操作类型可以有以下的操作: 添加列&#x…

【算法 高级数据结构】树状数组:一种高效的数据结构(一)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:算法题、 基础算法~赶紧来学算法吧 💡往期推荐: 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理&#x…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过…

20个Python函数程序实例

前面介绍的函数太简单了: 以下是 20 个不同的 Python 函数实例 下面深入一点点: 以下是20个稍微深入一点的,使用Python语言定义并调用函数的示例程序: 20个函数实例 简单函数调用 def greet():print("Hello!")greet…

WPF Border控件 基本使用

Border 基本使用 1单线效果 代码&#xff1a; <Border Grid.Row"0" BorderThickness"0,0,0,1" BorderBrush"Red" /> 说明&#xff1a; BorderThickness"0,0,0,1" 可以分别设置四条边&#xff0c;顺序是&#xff1a;左 上 右…