Mysql的索引与事务理解

news2025/1/14 18:34:16

目录

一、Mysql索引

1、索引的概念

2、索引的特点

3、索引使用场景

4、Mysql有关索引的操作

(1)查询表具有的索引

(2)增加索引

(3)删除索引

5、索引实现原理

(1)B树

(2)B+树

(3)数据库选择B+树的原因

二、Mysql事务

1、事务的概念

2、事务的特点

3、事务的隔离等级

4、数据库操作事务

一、Mysql索引

1、索引的概念

索引是通过额外的数据结构,针对表里的数据进行重新组织,加快查询速度。

2、索引的特点

(1)加快查询的速度;

(2)索引自身也是一种数据结构,会占据存储空间;

(3)当对表进行增、删、改时,对应的索引也要进行修改。

3、索引使用场景

索引适用于表查询的频率高,但是增删改的频率低。

4、Mysql有关索引的操作

先创建一个学生表:

(1)查询表具有的索引

命令:show index from 表名

Mysql中的primary key、unique、foreign key都会默认自动生成索引。

一个表可以有多个索引,索引都是根据具体的列展开的。类似于新华字典中的拼音查询和部首查询

(2)增加索引

命令:create index 索引名称 on 表名(对应索引列)

需注意:如果表中数据较多时,创建索引要慎重,创建时会扫描整个表的数据,涉及大量的读取和写入操作,导致大量的硬盘IO,数据库极容易挂。

ps:如果表中已有数据,但想加入索引的话,可以重新建立一个相同的表,对应列加上索引,然后将表中数据复制到新表中。

(3)删除索引

命令:drop index 索引名称 on 表名

5、索引实现原理

索引是如何做到对应列名快速找到相应数据的???

数据库索引采用的数据结构是B+树,它的前身是B树。

(1)B树

①概念

B树是一个n叉搜索树,与二叉搜索树的区别在于:二叉搜索树一个节点只有一个值,划分出了2个区间;而n叉搜索树,一个节点包含n个值,划分出了n+1个区间。若两棵树高度相同,n叉搜索树的元素更多。

例如:

②特点

数据的索引值和具体data都在每个节点上;任何一个关键字只会出现在一个节点中;每遍历一个节点,就需要进行一次硬盘IO;搜索可能会在非叶子节点结束,搜索次数具有不确定性。

(2)B+树

①概念

B+树是在B树上做了改进,B树上一个节点有n个值,会划分出n+1个区间;对于B+树,一个节点有n个值,会划分出n个区间。

②特点

每个节点的n个值中,存在一个最大值来自父节点;每个节点的值,都会在子树中重复出现;所有值最终都会出现在叶子节点,叶子节点之间使用链式结构相连;查询时间是稳定的,都需要从根结点查询到叶子结点,非叶子节点存储索引值即可,叶子节点存储索引值+数据。减少了硬盘IO次数,对于非叶子节点数据可以存储到内存中,在内存中比较即可。

(3)数据库选择B+树的原因

B+树的查询时间是稳定的,都需要从根结点到叶子结点,经过的硬盘IO次数是一样的;而B树查询时间不稳定,经过的硬盘IO次数也不一定,具有不确定性。

二、Mysql事务

1、事务的概念

对表执行的一批操作(多个操作),在同一个事务当中,这些操作要么全部成功,要么全部失败,不存在部分成功的情况。

2、事务的特点

(1)原子性

通过事务,把多个操作打包到一起,这些操作要么全部成功要么全部失败。

(2)一致性

一个事务必须使数据库从一个一致性状态(数据处于一种有意义的状态)转换到另一个一致性状态。

(3)隔离性

多个事务并发执行时,事务与事务之间应该要不受干扰。

(4)持久性

一个事务一旦提交,对数据库中数据的改变是永久性的,数据会持久化到硬盘。

3、事务的隔离等级

(1)读未提交---读写都未加锁

问题:事务1修改了某个数据,但是没有提交事务1;此时事务2读取到了同一个数据,此时事务2读到的数据是脏数据,还未修改成功(脏读+不可重复读+幻读)。

(2)读已提交---写操作加锁(写的时候不能读)

问题:事务1修改了某个数据,且提交了改事务;此时事务2读取到了正确事务;事务3也修改了某个数据,此时事务2再次读取时发现两次读到的数据内容不一样(不可重复读+幻读)。

(3)可重复读---读和写都加锁(数据库默认隔离等级)

问题:事务1修改了某个数据,且提交了改事务;此时事务2读取到了正确事务;事务3也插入了某个数据,此时事务2再次读取时发现两次读到的数据记录数不一样(幻读)。

(4)串行化

问题:数据最靠谱,但并行程度最低,效率最低。

4、数据库操作事务

(1)开启事务

命令: start transaction

(2)提交事务

命令:commit

(3)回滚事务

命令:rollback

提交后,数据库有插入的新数据。

回滚后,数据库没有插入的新数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1628781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详细解析什么是期权交易的获利方法

期权交易的获利方法 在期权交易之前进行充分的准备工作和风险评估是至关重要的。其中行情结构、策略方法、预期收益和风险评估,是期权交易成功的关键要素。它们能帮助我们更好地制定交易计划,控制风险,并追求稳定的利润。以下是对这四点的详…

深入理解冯诺依曼体系结构

文章目录 冯诺依曼体系结构概念冯诺依曼体系结构的优势冯诺依曼体系结构的现实体现 冯诺依曼体系结构概念 冯诺依曼体系结构也称普林斯顿结构,是现代计算机发展的基础。它的主要特点是“程序存储,共享数据,顺序执行”,即程序指令和…

Leetcode297_二叉树的序列化与反序列化

1.leetcode原题链接:. - 力扣(LeetCode) 2.题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境&#xf…

Python | Leetcode Python题解之第51题N皇后

题目: 题解: class Solution:def solveNQueens(self, n: int) -> List[List[str]]:def generateBoard():board list()for i in range(n):row[queens[i]] "Q"board.append("".join(row))row[queens[i]] "."return b…

浅谈叉车车载电脑的市场现状

叉车的起源 叉车源于美国,兴于日本,虽然中国起步较晚,但是近些年来发展迅速。叉车又称叉式装载车,是对于成件托盘类货物进行装卸、堆垛和短距离运输,实现重物搬运作业的轮式工业车辆。 叉车的分类 叉车分为以上六大类…

webpack3插件CommonChunkPlugin分离vantUI和echarts,问题的webpackJsonp is not defined解决!!!

webpack3插件CommonChunkPlugin分离vantUI和echarts和报错webpackJsonp is not defined的解决 前景:因为项目使用的webpack3开发的场景,打包后的vendor很大,如图显示 如果不做gzip处理的话,大小在2M多,gzip后的大小是…

深入理解操作系统与计算机体系结构

文章目录 操作系统(Operator System)为什么要有操作系统操作系统是如何进行管理的为什么说操作系统是安全,稳定,高效的理解系统调用和库函数 操作系统(Operator System) 概念: 操作系统(Operating System,简称OS&…

C++中的数据结构与算法

随处可见的红黑树 一般会用到[key,value]。 例如github中这个例子,第一个是访问网站,第二个是访问次数,但是这个不是静态的,这有个动态排序,并且当我们需要让相应的访问次数加1的时候,我们用红黑树查找的时…

刷题训练之前缀和

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握前缀和算法。 > 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。 > 专栏选自:刷题…

Oracle系统参数调整【数据库实例优化系列一】

Oracle实例是:内存组件和相关的后台进程组成。这些内存组件提高了数据库的运行,而后台进程负责管理系统和内存组件。 一、SGA和实例优化 Oracle的SGA是指的系统全局区。sga是数据库运行期间使用的一段公有内存,即数据库用户都可以访问这段内存,包括: 共享池、重做日志缓冲…

分享一些实用的工具

1、amCharts5:模拟航线飞行/业务分布图/k线/数据分析/地图等 网址: JavaScript mapping library: amCharts 5https://www.amcharts.com/javascript-maps/ Demo地址:Chart Demos - amChartshttps://www.amcharts.com/demos/#maps 他分为amC…

Xcode隐私协议适配

1. Privacy manifest files 1.1 简介 自己App或三方SDK(通过XCFrameworks|Swift packages|Xcode projects集成的)需要包含一个隐私清单文件(privacy manifest)叫作 PrivacyInfo.xcprivacy。它是一个属性列表,记录了A…

【Hadoop】-HDFS的存储原理[4]

目录 前言 一、fsck命令 1、HDFS副本块数量的配置 2、fsck命令查看文件的副本数 3、block配置 二、NameNode元数据 1、edits文件 2、fsigame文件 3、NameNode元数据管理维护 4、元数据合并控制参数 5、SecondaryNameNode的作用 三、HDFS数据的读写流程 1、数据写入…

2024第十五届蓝桥杯网络安全赛项WriteUp

欢迎关注公众号【Real返璞归真】回复【蓝桥杯2024】获取完整题目附件。 排名 安全知识 错1个选择题,题目说的不清楚,没搞懂题意。肯定不能用eval。错了理论题有点遗憾。 没想到这题前端是要解析json数据,排除CD选了A,结果发现正…

AI大模型日报#0427:阿里智能体“组装工厂”开源、Meta推70M参数SceneScript模型解码真实场景

导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。 标题: BattleAgent:再现历史事件,对历史战役进行多模态动态模拟|大模型论文摘要: 科技论文摘要&…

百度SDK创建应用地址解析失败问题

在百度SDK的设置里先用IP白名单校验全部都通过,项目上线之后再改就行 0.0.0.0/0

数据结构(七)---二叉树

目录 一.树的基本概念 二.树的性质 三.二叉树 1.二叉树的基本概念 2.特殊的二叉树 (1)满二叉树 (2)完全二叉树 (3)二叉排序树 (4)平衡二叉树 3.二叉树的性质 4.完全二叉树…

安装好fedora_kde系统后的操作

文章目录 1 前言2 办公软件2.1 输入法2.1.1 安装 fcitx52.1.2 安装 fcitx5-rime2.1.3 安装 東風破2.1.4 使用 東風破 安装 郭斌勇 大神的 新世纪五笔 项目2.1.5 配置 fcitx5-rime2.1.6 重新部署 3 感谢阅读~ 1 前言 本文用的是 fedora 40 kde plasma 6。 因为有很多的软件都同时…

VTK----VTK数据结构详解1(几何篇)

在讲VTK的数据结构之前,我们先了解可视化数据的两个特征:离散性、有规则或无规则。 离散性。当我们使用计算机去表示我们的数据时,一般都是基于有限数量的点做信息的采样(或插值),因此可视化的数据是以一种…

Sylar C++高性能服务器学习记录07 【协程模块-知识储备篇】

早在19年5月就在某站上看到sylar的视频了,一直认为这是一个非常不错的视频,由于本人一直是自学编程,基础不扎实,也没有任何人的督促,没能坚持下去,每每想起倍感惋惜。恰逢互联网寒冬,在家无事&a…