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

常见的MySQL数据库面试题

前言

作者:小蜗牛向前冲

名言:我可以接受失败,但我不能接受放弃

  如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正

总结一下mysql中常见的面试题 

1、MySQL中的索引知道吗?能讲讲索引有哪些种类吗?都有什么用

 答:

mysql中的索引他能提高数据库的查询速度,我们为数据表中的特点列创建数据结构(这InnoDB存储引擎,底层原理是b+树)通过这个数据结构快速查找到结果,我们可以把索引理解为一个本书的目录,通过空间来换取时间。

mysql按照不同的分类可以分为不同的索引类型:

  • 按照物理存储分类:聚族索引(主键索引),二级索引(辅助索引)
  • 按照字段特效分类:主键索引,唯一索引,普通索引,前缀索引。

对于聚族索引B++树的叶子节点存放的是数据,而非叶子节点存放的是索引。

二级索引B++树的叶子节点存放的是主键,而不是数据。

当我们通过主键索引查找数据的时候,会直接通过B++树的数据结构在叶子节点查找到数据,而二级索引,他的B++树由于叶子存放的是主键 ,他会找到对应的主键,在另外一颗存放主键的B++树中查找数据,这个过程我们称为回表。当我们查找的数据可以在二级索引中找到我们就称为覆盖

2、为什么在InnoDB存储引擎选择B++树做为索引的底层结构,其他的数据结构可以不可以?

答:

数据库他的工作就是于磁盘打交道,无论他是存储还是查找数据,都是要进行I/O的。所以我们选择的数据结构应该满足:

  • 能在尽可能少的磁盘的 //0 操作中完成查询工作,
  • 要能高效地查询某一个记录,也要能高效地执行范围查找

二分查找树,虽然他的查找的时间复杂度O(logn),但是他在特殊情况下会退化为链表,那时间复杂度就变为了O(n)。

平衡二叉查找树(AVL 树),虽然他解决了这特殊情况下不会退化为链表的情况下,但是如果随着节点的增多,树的高度也会变高,树的高度变高也就意味着I/O的次树会增加。

B树,B树是一种多叉树,他的每个节点都存放着索引+记录。

B+树,B+树也是一种多叉树,他只有叶子节点才会存放记录,并且这些记录是通过双向链表连接起来的。

但是我们这里仍会选择b+树做为mysql索引的底层结构,原因如下:

对于单点查询:由于B++树只有叶子节点才会存放数据,而非叶子结构只会存放索引,但是B树的节点既存放数据+索引,这就导致在有相同的数据情况下B++树会比B树更加矮胖,这也意味着I/O的次数会更少。

插入和删除效率:B++树在删除数据是非常快的,因为数据都在最底层的叶子节点,基本上删除一个节点就可以了。但是B树在删除节点的过程由于没有冗余节点,这就要导致在删除节点后要进行复杂的树形变形来维持树的结构。插入和删除也是一样的。

范围查询:B+树和B树的查找都是从根节点开始,递归向子节点查找,但是B+ 树所有叶子节点间还有一个链表进行连接,这种设计对范围查找非常有帮助,而B树没有这样的结构,比如当我们都查找底层某个叶子节点的时候,B++树可以通过链表进行查找,而不需要在递归返回到上层节点,这样就减少了不必要的I/O,B树就只能返回查找。

3、事务了解吗?他的特性有哪些?能讲一讲你对隔离级别的理解吗?

答:事务是用来 管理数据库中一组逻辑操作的单元,他要么不执行,要么完全执行以保证数据库的一致性

事务有四大特性ACID:

  • 原子性(Atomicity):指的事务的操作要么全部成功,要么全部失败回滚。
  • 一致性(Consistency):在事务的执行前后,数据库都是一致的,也可以认为是符合预期的,比如当我向张三转账300,张三的银行账号应该增加300,也我的账户应该减少300。如果都发生了就是符合预期,这也就是一致性。
  • 隔离性(Isolation):多个并发事务之间相互隔离,一个事务的执行不能被其他事务干扰,这个由事务的隔离级别决定。
  • 持久性(Durability):一旦事务提交,对其数据库的影响是永久的,即使发生了故障也不会影响结果。

 事务的隔离性是由隔离级别决定的,有四种隔离级别,从低到高:

读未提交:指一个事务可以读取到其他未递交的事务,但是会导致脏读,幻读,不可以重复读

读以提交:一个事务只能读取已经提交的数据,但是仍会导致不可重复读,幻读

可重复读:在同一事务中读取同一数据上一致的,不会受到其他事务的影响,防止其实事务的干扰,但可能会出现幻读

可序列化:最高的隔离级别,事务完全串行化执行,事务之间完全隔离,并发性能最差,因为事务完全串行化执行。 

  • 脏读指:在事务中读到了未提交的数据。
  • 不可重复读指:在同一事务中,二次读取结果不同
  • 幻读:在同一事务中,二次查询的结果不一致,比如:新增或者删除的行在第二次查询中会消失。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 样本熵与近似熵:度量时间序列复杂性的方法
  • 2024 NVIDIA开发者社区夏令营环境配置指南(Win Mac)
  • 【过题记录】8.4(robocom补题,网络流)
  • Go语言加Vue3零基础入门全栈班11 Go语言+gorm用户管理系统实战 2024年08月03日 课程笔记
  • 一款好用的开源网站内容管理系统
  • Matplotlib中用于绘制垂直线的函数axvline的参数介绍
  • 什么是提示词注入攻击
  • 读零信任网络:在不可信网络中构建安全系统07设备信任
  • 网络编程相关
  • 6万字嵌入式最全八股文面试题大全及参考答案(持续更新)
  • JavaDS —— AVL树
  • C++ 最小生成树 洛谷
  • 群晖NAS结合内网穿透工具实现远程连接内网SFTP服务传输文件
  • 【人工智能基础二】人工神经网络基础
  • JAVA通过debezium实时采集mysql数据
  • [PHP内核探索]PHP中的哈希表
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 4个实用的微服务测试策略
  • axios 和 cookie 的那些事
  • Debian下无root权限使用Python访问Oracle
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • JavaScript 基本功--面试宝典
  • java多线程
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Mybatis初体验
  • React Native移动开发实战-3-实现页面间的数据传递
  • 工作手记之html2canvas使用概述
  • 检测对象或数组
  • 模型微调
  • 使用SAX解析XML
  • 小程序开发中的那些坑
  • Java数据解析之JSON
  • Java性能优化之JVM GC(垃圾回收机制)
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # include “ “ 和 # include < >两者的区别
  • (1)(1.11) SiK Radio v2(一)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)MFC+openGL单文档框架glFrame
  • (笔试题)分解质因式
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十六)串口UART
  • (算法)Travel Information Center
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)fock函数详解
  • (转)nsfocus-绿盟科技笔试题目
  • (转)setTimeout 和 setInterval 的区别
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitignore文件—git忽略文件
  • .NET Core 2.1路线图
  • .net FrameWork简介,数组,枚举
  • .net 程序发生了一个不可捕获的异常