Mysql(索引与事务)

news/2024/12/21 22:04:59/

索引查询与普通查询的区别

普通查询 :执行步骤为先对表进行遍历,然后把当前的行带入条件中进行判断,符合条件执行,不符合跳出。这种情况在遇见数据较多的情况下就会出现问题,效率太低。

索引查询:是对查询操作的优化手段,通过索引可以加快查询的速度(一个索引是针对一列来进行指定的,只有针对这一列条件进行查询时,查询速度才会被优化),避免对表进行遍历。缺点 由于索引查询生成索引需要一些列的数据结构,这些数据存贮在硬盘上占用内存,其次引进索引后对数据修改删除插入还要对索引进行修改,因此对数据的插入修改删除的速度也会大大降低。

 索引的操作

查看索引

show index from 表名;

 不加约束时不会生成索引,下图案例在对索引查询的时候显示的就是空,主键,unique,外键都会生成主键。

使用主键,会自动生成索引。

外键约束的索引 :

创建索引

create index 索引名字 on 表名 (列名);

删除索引

drop index 索引名字 on 表名;

 索引的背后逻辑(面试)

数据库索引的引入是一个改进的树形结构,B+树(N叉搜索树)。一个节点上存在N个key,划分成N个区间,每个节点上N个key中最后一个相当于当前子树的最大值,父节点上的每一个key都会以最大的身份在子节点的对应区间中存在因此父节点的key可能重复出现。B+树的最大优点就是,B+树会构成和链表一样的结构通过节点进行前后链接。这样在查询某一区间的数据只用知道首尾就可以把数据区间取出。相对于普通的树形结构减少了回溯的次数,减少了硬盘i/o的读取。

什么是事务

在早些年代会出现,A给B转了钱而B却并未收到,因此引入了事务中的回滚(指的是通过检查若没有执行成功就回退回去,比如A给B转了钱而B却并未收到时,那么就会触发回滚把A转出金额再返回给A)来解决这一问题。事务是把多个SQL打包成为一个整体,要么都执行,要么做到看起来都不执行的样子。

事务的特性:

  • 原子性:保证一系列操作都能正确执行或者恢复如初
  • 一致性:事务执行之前之后,数据都不能太离谱
  • 持久性:事务做出的修改,都是在硬盘上持久保存的。服务器重启数据依然存在
  • 隔离性:解决数据库处理并非事务中出现的问题

并发处理事务中的问题

1.“脏读”:指的是A正在写数据的过程,B在读取A的数据,随后A修改了数据,导致B之前读入的数据变成了无效数据。

2.重复读:指的是并发执行事务过程中,如果事务A在内部多次读取同一个数据的时候,出现不同的情况,这种情况就是不可重复读。简单说对一个事务不能出现两次读取是不同的事务

3.幻读:指的是一个事务A执行过程中两次读取并未发生数据内容的变化,但是结果集发生了变化(结果集中临时表多了或少了)

如何解决并发处理事务中的问题

  • 解决脏读的方法就是通过对核心数据进行“写加锁”(写的时候不能读)
  • 解决重复读的方法是“读枷锁”(读的时候不能写)
  • 解决重幻读的方法是保证绝对的串行执行事务,此时完全没有并发

事务开启

start transaction;//开启事务后执行的每个sql都自成一个体系

事务结束

commit; //事务结束

主动触发回滚

rollback;//主动触发回滚,一般是要搭配一些逻辑条件进行使用


http://www.ppmy.cn/news/1533971.html

相关文章

我为什么决定关闭ChatGPT的记忆功能?

你好,我是三桥君 几个月前,ChatGPT宣布即将推出一项名为“记忆功能”的新特性,英文名叫memory。 这个功能听起来相当吸引人,宣传口号是让GPT更加了解用户,仿佛是要为我们每个人量身打造一个专属的AI助手。 在记忆功…

(作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第3关Git 基础知识

任务编号 任务名称 任务描述 1 破冰活动 提交一份自我介绍。 2 实践项目 创建并提交一个项目。 破冰活动 提交一份自我介绍。 每位参与者提交一份自我介绍。 提交地址:https://github.com/InternLM/Tutorial 的 camp3 分支~ 安装并设置git 克隆仓库并…

「空间智能」跨越维度壁垒 - 构筑AI驱动的XR元宇宙

引言 在AI和XR技术快速融合的背景下,一场由「空间智能」(Spatial Intelligence)引领的革命正在悄然展开,为元宇宙的发展注入新的动力。这场革命的核心推动者之一,是由"AI教母"李飞飞领导的World Labs。Wor…

JavaScript---BOM,DOM 对象

一.BOM对象 Browser Object Model 浏览器对象模型。JavaScript 将浏览器的各个组成部分封装为对象 Window :浏览器窗口对象。 对象表示浏览器中打开的窗口。Navigator:浏览器对象。 对象包含有关浏览器的信息。Screen:屏幕对象。 对象包含有…

vue3中el-input在form表单按下回车刷新页面

摘要&#xff1a; 在input框中点击回车之后不是调用我写的回车事件&#xff0c;而是刷新页面&#xff01; 如果表单中只有一个input 框则按下回车会直接关闭表单 所以导致刷新页面 再写一个input 表单 &#xff0c;并设置style“display:none” <ElInput style"display…

【C++设计模式】(四)创建型模式:简单工厂模式,工厂方法模式,抽象工厂模式

文章目录 &#xff08;四&#xff09;创建型模式&#xff1a;简单工厂模式&#xff0c;工厂方法模式&#xff0c;抽象工厂模式简单工厂模式工厂方法模式抽象工厂模式 &#xff08;四&#xff09;创建型模式&#xff1a;简单工厂模式&#xff0c;工厂方法模式&#xff0c;抽象工…

傅里叶分析之掐死教程(完整版)更新于2014.06.06

作 者&#xff1a;韩 昊 知 乎&#xff1a;Heinrich 微 博&#xff1a;花生油工人 知乎专栏&#xff1a;与时间无关的故事 谨以此文献给大连海事大学的吴楠老师&#xff0c;柳晓鸣老师&#xff0c;王新年老师以及张晶泊老师。 转载的同学请保留上面这句话&#xff0c;谢谢。如果…

2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1

目录 1. 在github上搜项目 (以OpenOcc为例&#xff09; 2. 转移到码云Gitee上 3. 进入Linux服务器终端 (jupyter lab) 4. 常用Linux命令 5. 进入对应文件夹中导入项目(代码) 注意&#xff1a;系统盘和数据盘 1. 在github上搜项目 (以OpenOcc为例&#xff09; 把链接复制下…