MySql索引事务讲解和(经典面试题)

- 🎥 个人主页:Dikz12
- 🔥个人专栏:MySql
- 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香
- 欢迎大家👍点赞✍评论⭐收藏
目录
索引
概念
索引的相关操作
索引内部数据结构
事务
为什么使用事务?
事务的使用
事务的特性
事务隔离级别
索引
数据库使用select查询的时候:
1.先遍历表
2.把当前的行给带入到条件中,看条件是否成立
3.条件成立,这样行就保留;否则,跳过。
如果表非常大,这样的遍历成本就比较高,至少是O(n),每次读取一个数据都需要读取磁盘,开销是很大的。所以,就引入了索引,索引属于是针对查询操作 引入的优化手段,可以通过索引来加快查询速度,避免针对表进行遍历。
概念
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。
索引的相关操作
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。
- 查看索引
show index from 表名;

一个索引是针对一个列来指定的,只有针对这一列进行条件查询的时候,查询速度才能被索引优化!!!
- 创建索引
create index 索引名 on 表名(字段名);

创建索引操作也是一个危险操作!
创建索引的时候,需要针对现有的数据,进行大规模的重新整理。如果这个表的本来就很大,创建索引,也很容易数据库服务器给卡住。
- 删除索引
如果自动创建的索引(主键 / 外键 / unique),是不能删除的!
drop index 索引名 on 表名;

索引内部数据结构

数据库引入的索引是一个改进的树形结构B+树(N叉搜索树)。
了解B+树之前,还是要先了解下B树.
- B树

B树:也是N叉搜索树;
每个节点上有M个key,划分出M+1个区间;
进行查询的时候,就可以直接从根节点出发,判定当前要查的数据在节点上的那个区间,就决定好下一步往哪里走;
进行添加 / 删除元素就可能涉及到节点的拆分 / 节点的合并;
- B+树
B+树是堆B树的改进;可以说是针对数据库量身定做的。

1.B+树是一个N叉搜索树.一个节点上存在N个key,划分为N个空间.
2.每个节点上的N个key, 最后一个,就相当于当前子树的最大值.
3.父节点上的每个key 都会以最大值的身份在子节点的对应区间存在.(key可能会重复出现()
(就是叶子节点这一层,包含了整个树的数据全集)
4.B+树会使用 链表 这样的结构,把叶子节点串起来。
(就非常方便的完成数据集合的遍历并且也很方便从数据集合中按照范围取出一个“子集”)
经典面试题!!!
B+树的优点(相对于B树以及哈希、红黑树):
1. N叉搜索树,树的高度有限的.降低IO的次数.
2.非常擅长范围查询.
3.所有查询最终都是要落到叶子节点.查询和查询之间的时间开销是稳定的.(不会出现这次快,下次慢)
4.由于叶子节点是全集,会把行数据只存储在叶子节点上; 非叶子节点只是存储一个用来排序的key.
事务
为什么使用事务?
开发中经常会涉及到一些场景,需要"一气呵成" 的完成一些操作.比如:转账~

引入事务就是为了避免上诉问题,事务就可以把多个sql打包成一个整体,可以保证sql要么全部执行,要么就“一个都不执行” 。(一个都不执行:不是真的一个都不执行,而是失败之后,只是看起来好像都没执行,关键操作,就是‘“翻新”,数据库称为“回滚” -> rollback)。
事务的使用
(1)开启事务: start transaction;
(2)执行各种sql
(3) 提交事务(结束):commit;
主动触发回滚: rollback => 出错,有很多中情况。
事务的使用,没什么说的,最重要的是事务背后的一些原理性质的内容!
也是经典的面试题!!!
事务的特性
1.原子性:回滚的方式,保证这一系列操作,都能执行正确,或者回复如初。
2.一致性:事务执行之前和之后,数据都不能太离谱。
3.持久性:事务做出修改,都是在硬盘上持久保存的,重启服务器,数据仍然是存在的,事务执行的修改仍然是有效的。
4.隔离性:
前三个都是好理解的,第四个隔离性涉及比较多!!也就单独拿出说。
隔离性: 数据库并发执行多个事务的时候,会涉及到一些问题.
并发执行:
并发程度越高,整体效率越高,隔离性越差,准确性越差!
在并发执行时,涉及的问题:
1.脏读问题

解决脏读问题:核心思路就是,针对写操作加锁。 只能读写完之后提交的数据
并发性降低了,隔离性提高了,效率降低了,数据准确性提高了!
2. 不可重复读 : 如果事务A在内部多次读取一个数据的时候,出现不同的情况,这种就是不可重复读.( 事务A 在两次读之间,有一个事务B 修改了数据并提交了事务)。
解决方法:刚才写的时候加锁了,写的时候不能读,没说读的时候不能写,所以,需要给读操作也加锁。(写的时候不能读,读的时候不能写)
3.幻读

解决方法:
效率 正确性 ==> 不同的需求场景 就有不同的要求
mysql服务器也提供了“隔离级别”,针对隔离级别程度进行设置,应对不同的需求场景。
上述内容就是事务的经典面试题!!
事务隔离级别
四种隔离级别,对应上面的三个问题,根据不同的业务场景,修改配置文件,设置不同的隔离级别。
相关文章:
MySql索引事务讲解和(经典面试题)
🎥 个人主页:Dikz12🔥个人专栏:MySql📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 索引 概念 索引的相关操作 索引内部数据结构 事务 为…...
《微信小程序开发从入门到实战》学习九十一
7.1 视图容器组件 7.1.2 scroll-view组件 scroll-view组件时是滚动的视图容器,可在竖直方向或水平方向上滚动,展示超出屏幕高度或宽度的内容。 使用竖直方向滚动时,需要通过wxss的height样式给scroll-view设置一个固定高度,超出…...
【立创EDA-PCB设计基础】6.布线铺铜实战及细节详解
前言:本文进行布线铺铜实战及详解布线铺铜的细节 在本专栏中【立创EDA-PCB设计基础】前面完成了布线铺铜前的设计规则的设置,接下来进行布线 布局原则是模块化布局(优先布局好确定位置的器件,例如排针、接口、主控芯片ÿ…...
Node.JS CreateWriteStream(大容量写入文件流优化)
Why I Need Node.JS Stream 如果你的程序收到以下错误,或者需要大容量写入很多内容(几十几百MB甚至GB级别),则必须使用Stream文件流甚至更高级的技术。 Error: EMFILE, too many open files 业务场景,我们有一个IntradayMissingRecord的补…...
安卓开发之自动缩放布局
AutoScalingLayout 适用于 Android 的自动缩放布局。 替换布局: 我们只需要替换根布局所需的自动缩放,子布局也将实现自动缩放。 原始布局AutoScalingLayout相对布局ASRelativeLayout线性布局ASLinearLayoutFrameLayout(框架布局ÿ…...
DDD系列 - 第9讲 实体、值对象
目录 引言一、实体1.1 数据库实体1.2 数据库实体 vs. DDD实体1.3 DDD实体的本质及其识别规则1.4 代码中如何定义实体二 、值对象2.1 值对象 vs. 附属属性2.2 值对象 vs. 实体2.3 代码中如何定义值对象2.4 何时使用值对象引言 之前我在《DDD系列 - 第4讲 从架构师的角度看待DDD…...
5分钟做自己的微信红包封面
文章目录 怎么制作自己的红包封面?开通红包封面的要求如下:收费情况制作具体网站:https://chatapi.onechat.fun/register?affYoU6 提交审核logo封面、挂件、气泡证明材料 发放红包封面其他 怎么制作自己的红包封面? 开通红包封面…...
pytorch中BCELoss 和 binary_cross_entropy_with_logits之间的区别
在PyTorch中,binary_cross_entropy_with_logits是一个函数,而BCELoss是一个类。它们都是用于二分类任务的损失函数。它们之间存在一些区别如下。 torch.nn.functional.binary_cross_entropy_with_logits: binary_cross_entropy_with_logits…...
无刷电机学习-方波电调 程序篇1(AM32)
一、AM32简介 AM32 固件专为 ARM 处理器设计,用于控制无刷电机 (BLDC)。该固件旨在安全、快速、平滑、快速启动和线性油门。它适用于多种车辆类型和飞行控制器。 AM32具有以下特点: 可通过 betaflight 直通、单线串行或 arduino 升级固件伺服 PWM、Dsh…...
如何自己制作一个属于自己的小程序?
在这个数字化时代,小程序已经成为了我们生活中不可或缺的一部分。它们方便快捷,无需下载安装,扫一扫就能使用。如果你想拥有一个属于自己的小程序,不论是为了个人兴趣,还是商业用途,都可以通过编程或者使用…...
HTML 入门手册(二)
目录 HTML 入门手册(一) 10-表单 11-input标签 11.1文本框 (text) 11.2密码框 (password) 11.3单选按钮 (radio) 11.4复选框 (checkbox) 11.5普通按钮 11.6提交按钮 (submit) 11.7重置按钮 (reset) 11.8隐藏域 (hidden) 11.9文件上传 (file) 11.10数字输入 (numbe…...
零基础学Python(5)— 基本数据类型
前言:Hello大家好,我是小哥谈。在内存中存储的数据可以有多种类型。例如:一个人的姓名可以用字符型存储,年龄可以使用数值型存储,婚姻状况可以使用布尔型存储。这里的字符型、数值型、布尔型都是Python语言中提供的基本…...
centos7安装Redis7.2.4
文章目录 下载Redis解压Redis安装gcc依赖(Redis是C语言编写的,编译需要)编译安装src目录下二进制文件安装到/usr/local/bin修改redis.conf文件启动redis服务外部连接测试 参考: 在centos中安装redis-5.0.7 Memory overcommit must…...
certificate-transparency-go用例
文章目录 证书的SCT列表验证SCT依赖包加载证书初始化log机构信息离线验证在线验证 证书的SCT列表 浏览器对证书链的合法性检查通过后,会再检查服务端证书附件里的SCT列表(Signed Certificate Timestamp); 浏览器内置了一批certif…...
前端上传大文件使用分片上传
前提:分片上传针对于一些大的文件、普通大小的文件使用element中的上传组件可以实现效果,例如几G的文件就会比较卡,所以这时候就需要用到分片上传~ 前端及后端分片上传笔记 效果:(上传进度展示) 效果:(上传成功的效果展示) 1、 新建一个上传组件 2、使用vue-simple-…...
Kotlin 解构声明
在一些像 Python 的高级语言中,支持 多返回值的,例如 x, y get_position() 这样操作接收。 而在 Kotlin 中,虽然不支持 多返回值,但有类似的 解构(destructure) 对象功能,叫做 解构声明。 用…...
基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(四)
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/n…...
遗传算法原理详细讲解(算法+Python源码)
博主介绍:✌专研于前后端领域优质创作者、本质互联网精神开源贡献答疑解惑、坚持优质作品共享、掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦! 🍅文末获…...
Linux文本处理指令汇总
Linux文本处理命令主要包括以下几种: grep:用于在文件中搜索包含指定字符串的行。 [roothanyw-bash-python ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologinawk:用于在文件中进行…...
Prompt Engineering
目录 什么是提示工程 什么是提示工程 在当今人工智能领域,提问大型语言模型(Large Language Models,LLM)已经成为一种常见的实践,但如何向这些模型提出问题,或者更准确地说,如何引导它们产生期…...
Xilinx UltraScale GT收发器实战:从时钟配置到8B/10B编码的避坑指南
Xilinx UltraScale GT收发器实战:从时钟配置到8B/10B编码的避坑指南 在高速数字系统设计中,Xilinx UltraScale系列FPGA的GT收发器是实现多Gbps数据通信的核心组件。然而,许多工程师在实际部署时会遇到时钟配置混乱、弹性缓冲区溢出等棘手问题…...
OpenLayers飞机航线动画实战:如何让SVG图标随航线动态转向(附完整代码)
OpenLayers飞机航线动画实战:SVG图标动态转向与轨迹平滑渲染技术解析 在航空监控、物流追踪等地理信息系统中,飞机或运输工具的实时轨迹展示一直是核心需求。传统静态路径显示已无法满足现代交互需求,如何实现图标随航线动态转向的平滑动画成…...
AIGlasses OS Pro性能调优指南:跳帧、画面缩放设置,流畅运行低算力设备
AIGlasses OS Pro性能调优指南:跳帧、画面缩放设置,流畅运行低算力设备 智能眼镜作为穿戴设备,其计算资源往往有限。AIGlasses OS Pro作为一款本地运行的智能视觉系统,如何在有限的硬件资源下保持流畅运行,是许多开发…...
Cadence 17.4 ORCAD PSpice 保姆级教程:手把手教你搭建RC低通滤波器并验证效果
Cadence 17.4 ORCAD PSpice 从零到精通:RC低通滤波器实战全解析 在电子设计领域,仿真工具的重要性不言而喻。对于初学者而言,Cadence 17.4 ORCAD PSpice可能看起来界面复杂、功能繁多,让人望而生畏。但别担心,本文将从…...
通义千问3-VL-Reranker-8B新手教程:零基础学会混合检索排序
通义千问3-VL-Reranker-8B新手教程:零基础学会混合检索排序 1. 认识这个强大的多模态排序工具 想象一下,你正在管理一个包含文字、图片和视频的庞大数据库。当用户搜索"户外运动装备"时,系统返回了100个结果——有些是产品描述文…...
【C++ 面试突击 · 07】大厂高频面试题:从菱形继承到const与constexpr的博弈深度解析
目录 1. 什么是菱形继承?怎么解决菱形继承? 2. 如何定义一个只能在堆上(栈上)生成对象的类? 3. C 强制类型转换运算符有哪些? 4. C 中的类型推导(auto)是如何工作的?…...
智能AI识别之集装箱缺陷识别 集装箱数据集 集装箱缺陷数据集 集装箱凹陷数据集 集装箱锈蚀孔洞图像数据集 yolo数据集地10624期
📦 集装箱缺陷检测计算机视觉模型( 这是一个基于 YOLOv8/YOLOv10 框架的工业级目标检测模型,专门用于识别集装箱表面的三类典型缺陷。🔍 核心信息 模型类型:目标检测(Object Detection)基础框架…...
Jetson Orin上YOLOv8推理慢?手把手教你安装GPU版PyTorch并导出TensorRT引擎
Jetson Orin加速YOLOv8推理:从环境配置到TensorRT引擎优化实战 当你第一次在Jetson Orin上运行YOLOv8时,是否也被那令人窒息的推理速度震惊了?一张图片300多毫秒的处理时间,别说实时视频分析,就连批量处理图片都显得力…...
3步颠覆传统下载体验:百度网盘直链解析工具让你告别会员枷锁
3步颠覆传统下载体验:百度网盘直链解析工具让你告别会员枷锁 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 从200KB/s到5MB/s的蜕变 你是否也曾遇到这样的困境&a…...
DLSS Swapper终极指南:如何快速管理游戏DLSS版本提升性能?
DLSS Swapper终极指南:如何快速管理游戏DLSS版本提升性能? 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为NVIDIA显卡用户设计的智能管理工具,能够无缝管理游…...



