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)已经成为一种常见的实践,但如何向这些模型提出问题,或者更准确地说,如何引导它们产生期…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...



