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

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设计基础】前面完成了布线铺铜前的设计规则的设置,接下来进行布线 布局原则是模块化布局(优先布局好确定位置的器件,例如排针、接口、主控芯片&#xff…...

Node.JS CreateWriteStream(大容量写入文件流优化)

Why I Need Node.JS Stream 如果你的程序收到以下错误,或者需要大容量写入很多内容(几十几百MB甚至GB级别),则必须使用Stream文件流甚至更高级的技术。 Error: EMFILE, too many open files 业务场景,我们有一个IntradayMissingRecord的补…...

安卓开发之自动缩放布局

AutoScalingLayout 适用于 Android 的自动缩放布局。 替换布局: 我们只需要替换根布局所需的自动缩放,子布局也将实现自动缩放。 原始布局AutoScalingLayout相对布局ASRelativeLayout线性布局ASLinearLayoutFrameLayout(框架布局&#xff…...

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)已经成为一种常见的实践,但如何向这些模型提出问题,或者更准确地说,如何引导它们产生期…...

Pixel Aurora Engine应用场景:独立开发者低成本构建像素IP资产库

Pixel Aurora Engine应用场景:独立开发者低成本构建像素IP资产库 1. 像素艺术创作新纪元 在游戏开发领域,像素艺术始终保持着独特的魅力。从早期的《超级马里奥》到现代的《星露谷物语》,像素风格游戏凭借其怀旧感和艺术表现力,…...

【Polars 2.0企业级数据清洗黄金法则】:5大生产环境避坑指南+实测性能提升3.7倍基准报告

第一章:Polars 2.0企业级数据清洗黄金法则总览Polars 2.0 以零拷贝语义、并行执行引擎与原生 Arrow 内存布局为核心,重构了企业级数据清洗的性能边界与工程可靠性。其惰性 API 与 eager 模式无缝协同,使复杂清洗流水线既可交互调试&#xff0…...

不露脸也能当主播?一文了解VTuber

不露脸也能当主播?一文了解VTuber很多人提到 VTuber,脑子里就是“二次元纸片人”在直播间卖萌。 但其实,你每天换的微信头像、用过的苹果拟我表情,短视频平台的3D头套全都是它的“远房亲戚”。 今天我们就把这层科技外衣扒开&…...

终极指南:30分钟打造你的首个ESP32 AI智能硬件项目

终极指南:30分钟打造你的首个ESP32 AI智能硬件项目 【免费下载链接】xiaozhi-esp32 An MCP-based chatbot | 一个基于MCP的聊天机器人 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 还在为嵌入式AI开发的高门槛而烦恼吗?物联…...

集团型企业BI试点,为什么一定要先做多域资源隔离?

艾瑞咨询《2025年中国BI市场报告》显示,超7成集团型企业的首次BI试点项目因跨业务单元权限冲突、数据口径混乱延期或终止(统计样本覆盖120家年营收超50亿的国内集团企业,统计窗口为2022-2024年试点项目全生命周期)。这个数据和大部…...

Qwen3.5-9B-AWQ-4bit企业应用落地:电商商品图智能解析与文字提取实战

Qwen3.5-9B-AWQ-4bit企业应用落地:电商商品图智能解析与文字提取实战 1. 电商场景下的图片理解挑战 在电商运营中,每天需要处理海量商品图片。传统的人工审核和标注方式面临三大痛点: 效率瓶颈:人工处理一张商品图平均需要3-5分…...

三星 Infinite AI 葡萄酒冰箱:智能厨房新尝试能否突围?

AI 加持,葡萄酒管理新体验周一,三星推出了 Infinite AI 葡萄酒冰箱,目前仅在韩国有售。这款冰箱采用了“AI 葡萄酒管理器”,借助安装在顶部的“AI 视觉”摄像头,能检测用户放入或取出的酒瓶及位置,还能分析…...

从rdt1.0到rdt3.0:可靠数据传输协议的演进与发送接收端FSM解析

1. 可靠数据传输协议的前世今生 第一次接触可靠数据传输协议(Reliable Data Transfer,简称rdt)是在十多年前的一个网络编程项目里。当时为了确保数据能准确无误地传输,我翻遍了各种资料,最终在《计算机网络&#xff1a…...

美的集团2025年营收创新高、利润100%分红 落地1.3万个AI智能体

3月30日,美的集团发布2025年年报,实现营业总收入4585亿元,同比增长12.1%;归属于上市公司股东的净利润439.5亿元,同比上升14%。在业绩再创新高的同时,伴随我国“人工智能”行动的全面实施,美的集…...

dig (Domain Information Groper):从命令行到自动化运维的DNS探秘

1. 从命令行工具到运维利器的dig进化史 第一次接触dig命令时,我正被一个诡异的域名解析问题困扰。当时作为新手运维,只会用ping和nslookup反复测试,直到同事甩给我一行dig trace example.com——瞬间看到了完整的DNS解析链条,那种…...