Mysql的事务Transaction及索引Index的小结

我们都是小青蛙MYSQL系列 MYSQL的一些经验 立即下载

内容参考:《高性能Mysql 第三版》 《Mysql是怎样运行的:从根儿上理解Mysql》这本书作者是

“小孩子” 掘金上有在售,作者微信公众号:我们都是小青蛙


Mysql的事务隔离级别:
	1.READ UNCOMMITE
		该隔离级别事务之间可以读取到其他事务未提交的数据,即为dirty read
	2.READ COMMITTED
		读取其他事务提交的事务,也就是该事务开启之后到提交之前的操作对其他事务
		都是不可见的,也成为不可重复读
	3.REPEATABLE READ
		可重复读,解决了脏读,该级别保证了在同一个事务中多次读取同样的记录的结果是
        一致的,但是理论上,可重复读还是无法解决幻读的问题,所谓幻读:指的是当某个
        事务读取某个范围的记录时另一个事务又在该范围内插入了新的数据,幻读就是每次
        读取的数据可能不一样,这个级别是Mysql的默认隔离级别,其它多数数据库的隔离
        级别是READ COMMITTED
	4.SERIALIZABLE
		串行化读取,是事务隔离的最高级别,强制事务串行执行,在读取数据的每一行加锁
		可能导致大量的超时和争锁问题,只有在非常需要确保数据一致性而且可以接受没有
		的情况下采用这种隔离级别

Mysql数据的存储:
	存放用户记录的数据页,存放目录项的数据页 都是16K,我们的实
	际用户记录其实都存放在B+树的最底层的节点上,这些节点也被称为叶子节点或叶节点,
	其余用来存放目录项的节点称为非叶子节点或者内节点,其中B+树最上边的那个节点也称
	为根节点。

B+树的节点即页(数据页)
	页内的记录按照索引从大到小的顺序组成一个单项链表
	各个存放用户记录的页也是根据页中用户记录主键大小排成双向列表
	存放目录项的页,也根据目录项记录的主键大小排成双向列表

	页表之间双向链表连接,页表内的目录项/记录项按照主键排成单向链表

聚簇索引:
	InnoDB存储引擎会自动的为我们创建聚簇索引。另外有趣的一点是,在InnoDB存储引擎中,
	聚簇索引就是数据的存储方式(所有的用户记录
	都存储在了叶子节点),也就是所谓的索引即数据,数据即索引。


InnoDB的B+树索引适用的条件(匹配原则)
	1.建立索引其实就是对以该索引的值对记录进行排序,联合索引是按照给出的索引的顺序
	依次排序,比如给a b c三个字段建立联合索引,先按照a排序a相同的情况下按b排序b相同
	则按照c排序,SELECT * FROM EMP WHERE a = * AND c = *那么只会走a索引,因为
	B+树叶子节点存储的用户记录是依照a、b、c依次排序的,在a相同的情况下直接查找c的
	匹配条件是做不到的,因为a相同时b的值可能时无序的,对不起,臣妾做不到!所以当
	建立了联合索引后必须至少包含最左侧索引,要不然所有的索引是失效的,但是索引是一把
	双刃剑,虽然提交了查询的效率,但是每个索引都对应一颗B+树,索引建立的越多,引擎
	维护的数据就要越多,明显就是拉跨,为什么这么说:因为索引每棵树的页节点之间是按照
	索引的值进行排序组成的双向链表,而每个页中,无论是目录项还是记录项都是以索引值排序
	组成的单向链表,对表的增删改都可能会导致页面分裂,页面回收,索引偏移,这就是维护
	索引要付出的代表,也是系统的开销所在
	有一条原则:以最左匹配的原则进行范围匹配只有在上一个所以匹配的情况下才可以使用下级
	一个规则例如在name一样的情况下还可以走age索引,但是以name查询出的结构age可能是
	无序的,所以不会走age索引

	......
	
	为用于搜索、排序或分组的列创建索引。如果索引列在比较表达式中不是以单独列的形式出
	现,而是以某个表达式,或者函数调用形式出现的话,是用不到索引的。
	我们知道,对于一个使用InnoDB存储引擎的表来说,在我们没有显式的创建索引时,表中的
	数据实际上都是存储在聚簇索引的叶子节点的。而记录又是存储在数据页中的,数据页和记
	录又是按照记录主键值从小到大的顺序进行排序,所以如果我们插入的记录的主键值是依次
	增大的话,那我们每插满一个数据页就换到下一个数据页继续插,而如果我们插入的主键值
	忽大忽小的话,这就比较麻烦了。数据页已经满了,再插进来咋办呢?我们需要把当前页面
	分裂成两个页面,把本页中的一些记录移动到新创建的这个页中。页面分裂和记录移位意味
	着什么?意味着:性能损耗!所以如果我们想尽量避免这样无谓的性能损耗,最好让插入的
	记录的主键值依次递增,这样就不会发生这样的性能损耗了。所以我们建议:让主键具有AU
	TO_INCREMENT,让存储引擎自己为表生成主键,而不是我们手动插入
	
	注:扫描聚簇索引 即 全表扫描

主键索引	
	有主键的表在表创建之后就会为其创建索引,如果想使用主键意外的字段作为索引,那就需要
	额外的创建索引,即二级索引,二级索引在创建之后根页面什么也没有,当插入数据之后达到
	可存储的记录上限后页面分裂,产生出新的页,原来的根页中就保存索引 + 主键 + 值,这个
	其实就是建树的过程
	
	在InnoDB中索引即数据,数据即索引,而MyISAM中索引时索引,数据是数据


MyIsam引擎关于索引的问题
	首先MyIsam会将索引和数据分离,记录会以插入顺序存储在数据文件中,索引的叶子节点
	存储的并不是完整的用户数据,而是主键和行号
	与InnoDB索引不同的地方在于Inno的B+叶子节点中会存放记录的完成数据,而MyI只存储
	主键和页号,查询的时候需要根据主键确定行号,然后依据行号回表查询。因为MyIsam采用
	的时定长行格式static (还有Dynamic、Compressed),这样每条记录的大小都是固定的,就
	可以轻松算出每条记录在数据文件中的偏移量,MyISAM会在叶子节点处存储该条记录的偏移量

	注:如果为每个字段创建索引,需要维护大量数据之间的排序关系,很消耗性能和存储空间
	
关于索引的总结
	上边只是在创建和使用B+树索引的过程中需要注意的一些点
	1.B+树索引在空间和时间上都有代价,所以没事儿别瞎建索引。
	2.B+树索引适用于下边这些情况:
		全值匹配
		匹配左边的列
		匹配范围值
		精确匹配某一列并范围匹配另外一列
		用于排序
		用于分组
	3.在使用索引时需要注意下边这些事项:
		1.只为用于搜索、排序或分组的列创建索引
		2.为列的基数大的列创建索引,基数:数据的离散程度,越离散越适合
		3.索引列的类型尽量小,以整形为例TINYINT、MEDIUMINT、INT、BIGINT,能使用TINYINT就不使用
		MEDIUMINT,因为索引是存在B+树中的,占用空间越少,那么每次读入内存的数据页中目录项就越
		多,那么一次可处理的记录数就越多。(InnoDB的数据也大小为16k)
		4.可以只对字符串值的前缀建立索引
		5.只有索引列在比较表达式中单独出现才可以适用索引
		6.为了尽可能少的让聚簇索引发生页面分裂和记录移位的情况,建议让主键拥有AUTO_INCREMENT属性。
		7.定位并删除表中的重复和冗余索引
		8.尽量使用覆盖索引进行查询,避免回表带来的性能损耗。

HUMAnN数据库国内备份下载源(转自刘永鑫博士github) 百度云链接 R语言常用包合集 Windows 10版4.0.x:链接:https://pan.baidu.com/s/1JFwLP2SonK1howD5MNgNYg 提取码:l08k Windows 10版3.6.x:链接:https://pan.baidu.com/s/1h-qR2lmlaMgR4M7VbgtAFg 提取码:s5fi 下载后解压至当前目录,可获得3.6/4.0目录,剪切并替换文档 - R - win-library - 3.6/4.0 目录即可 扩增子数据库 宏基因组数据库 HUM. 阅读详情

相关推荐

深度学习分类任务中,正负样本比例失衡的5种实战解决方案(附代码)

本文深入探讨了深度学习分类任务中正负样本比例失衡的5种实战解决方案,包括智能采样技术、动态数据增强、损失函数工程、模型架构创新和训练策略优化。针对信用卡欺诈检测、医疗诊断等场景,提供了详细的代码实现和评估方法,帮助开发者有效解决样本不平衡问题,提升模型在真实场景中的表现。

h9j8k7l6m5n的博客 424

交易数据结构

交易数据详情 传统交易 交易详情: blockHash: 当前交易的区块hash blockNumber: 区块高度 from:交易发起方 gas: 当前交易花费的gas gasPrice:gas价格(gwei) hash: 交易hash input: 附加信息 nonce: from账户发起交易的总数 to:交易接收方 value: 交易金额(wei) transactionIndex:当前交易在这个区块的的打包顺序,从0开始计数 type

BXQ1120的博客 4372

【2025年五一数学建模竞赛】A题 完整论文 模型建立与求解

2025年五一数学建模竞赛 A题:基于历史数据与模式识别的道路车流量推测模型研究

Magnolia_He的博客 3783

MVCC文章勘误

标签: 「我们都是小青蛙」公众号文章 前几天在文章 MySQL事务隔离级别和MVCC 中阐述了InnoDB的MVCC的工作原理,但是在一个地方出现了错误,特此更正一下。 原文错误的地方: 在事务生成readview时,会把当前系统中正在执行的读写事务写入到m_ids列表中,在判断某条记录可见性时,之前文章中写的是当记录的trx_id属性大于m_ids中的最大值时,该记录是不可见的。 应该更正为: ...

weixin_33982670的博客 155

jetson orin nano 使用cuPCL

jetson开发板上使用pcl时,正常使用的是cpu,拖慢了整体的效率。cuPCL有一些库用于使用CUDA处理点云。

weixin_42256401的博客 1020

logisim实验六:MIPS运算器设计

实验目的 学生理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的 32 位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。 设计要求 利用前面实验封装好的 32 位加法器以及 logisim 平台中现有运算部件构建一个 32 位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号

gyp0205的博客 2万+

2020-09-08

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @[TOC](2020-09-08) 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 #1 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 #2 二、使用步骤 1.引入库 代..

weixin_41576919的博客 1385

MarkDown简介(深度解析MarkDown用法)

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I...

酷酷的旭 7341

公众号是怎么赚钱的

标签: 「我们都是小青蛙」公众号文章 前两天发了一篇名为《靠放广告挣钱,靠谱么?》的文章,文章发出几分钟后就被我悄悄的删掉了,主要是因为文中包含了可能被微信封号的一些内容,受其他亲爱的公众号运营小伙伴的提醒果断删除了。但是出人意料的是,在发文的几分钟内,比我发技术文章的点击量高了几倍,看起来大家对怎么挣钱这个话题还是非常感兴趣的,那我下边就专门搜集了几种公众号赚钱的方式和常用套路给大家看看。 打...

weixin_33743248的博客 420

AP发票批量付款程序(WEB ADI)

CREATE OR REPLACE PACKAGE MEW_AP_BATCH_PAYMENTS_PKG IS   PROCEDURE MAIN(P_BATCH_ID          NUMBER                 ,P_ORG_ID            NUMBER                 ,P_BANK_ACCOUNT_NAME VARCHAR2

储藏室 5051

STM32 ST-LINK Utility 无法烧录程序的解决方法

当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ...

wocute的博客 9521

MySQL索引和事务

索引与事务是 MySQL 性能与数据可靠性的核心支柱。通过掌握高级索引优化技巧、事务处理机制及性能监控方法,开发者能够设计出高效、稳定的数据库系统。随着数据库技术的发展,未来索引结构(如列式索引、自适应索引)和分布式事务方案将进一步提升系统的扩展性与可用性。在实际开发中,需结合业务场景不断实践与优化,充分发挥 MySQL 的强大能力。

2501_91112123的博客 1143

3、深入了解响应式扩展(Reactive Extensions)

本文深入探讨了响应式扩展(Reactive Extensions,Rx)的起源、核心概念及其在客户端和服务器端的应用。从Volta项目谈起,解析了Rx如何解决事件传输问题,并介绍了可观察对象(IObservable)和观察者(IObserver)的设计与实现机制。文章还详细讲解了Rx操作符、弹珠图的使用、拉模型与推模型的对偶性原理,并通过代码示例展示了如何将枚举转换为可观察对象。最后总结了Rx的优势,并展望其在未来软件开发中的广泛应用前景。

m2n3b4v5c6的博客 113

数据库MySQL-索引 (Index)和 事务 (Transaction)

MySQL索引与事务是数据库性能与安全的两大核心。索引通过创建高效的数据结构大幅提升查询速度,但会降低写入性能并占用磁盘空间,适合高区分度且频繁查询的列。事务则确保多步操作的原子性,通过ACID特性(原子性、一致性、隔离性、持久性)保证数据一致性,典型应用如银行转账。通过案例分析和实践练习,可以深入理解索引的优化效果和事务的安全保障机制。

道冲而用之或不盈,渊兮似万物之宗。 908

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mysql的索引,事务小结

索引 通俗的讲,新华字典前面的部首与拼音查询就是索引,通过前面的查询,能迅速定位这个字在这本书的什么位置,节省了大量翻找的时间。在庞大的数据库中,当你需要查询某个数据时,没有索引,数据库会遍历整个库的数据查找,浪费了大量的时间与资源,而索引,存储着索引值和这个值所对应的物理地址,查询索引,直接前往对应的物理地址查询数据,快速,便捷。 索引的创建原则: ■表的主键、外键必须有索引 ■记录数超过300行的表应该有索引 ■经常与其他表进行连接的表,在连接字段上应该建立索引 ■唯一性太差的字段不适合建立索引 ■更新

ky0nu的博客 171

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MySQL之事务和索引

事务原则(ACID)

ijwwio的博客 1070

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MySQL索引事务

索引作为后端面试常考的内容.是一种特殊的文件,其中包含着对数据表里所有记录的引用指针,能够对表中的一列或者多列创建索引,同时指定索引类型,不同的索引有不同的数据结构实现方式对于索引我们可以做一个简单的比喻,假设有一个快递站,快递站里有很多快递,那么这个快递站就是一个数据表,而里面的快递就是数据.当你的快递到站时,你的手机会接收到一个快递码,你可以在快递站通过这个快递码找到你的快递,那么这个快递码就是索引,它的作用和索引是一样的,能够让你快速定位到快递的位置.也就是说,索引的作用就是。

2303_77303297的博客 942

【MySQL】索引& 事务

索引 单字段索引 单字段索引的作用原理 如何选择索引字段? 组合索引 组合索引的原理 索引的删除 索引的开销 索引总结 事务 事务是什么? 如何确保操作的原子性和数据的一致性? 事务的隔离性? 思考题 索引...

Remember who you are! 782

MySQL事务、索引、数据恢复和备份

MySQL数据库,事务处理,视图,数据库索引,管理索引,数据库备份,数据库恢复

蒸汽鸟的博客 1056

mySQL索引和事务

索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。在数据十分庞大的时候,索引可以大大加快了查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。索引的作用用类似于图书的目录可以根据目录中的页码快速找到所需的内容。索引作用。

2302_79420346的博客 794

Mysql索引与事务

MySQL索引与事务核心知识点摘要: 索引篇: 索引本质是排序数据结构(B+树为主),通过减少IO次数提升查询效率(log₂N vs N/2) 五大索引类型:普通索引、唯一索引(值唯一)、主键索引(聚簇存储)、组合索引(最左前缀原则)、全文索引 创建原则:大表高频字段优先,区分度低/更新频繁字段慎用,字符串推荐前缀索引 事务篇: ACID特性:原子性(全做/全不做)、一致性(数据合法)、隔离性(并发控制)、持久性(永久生效) 操作语法:BEGIN/COMMIT/ROLLBACK,InnoDB专有特性 隔离级

kiku1818的博客 701

MySQL事务与索引

事务:就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 事务的ACID原则:1.原子性   2.一致性   3.隔离性   4.持久性 SET     AUTOCOMMIT 使用SET语句来改变自动提交模式 SET   AUTOCOMMIT=0;关闭自动提交模式 SET   AUTOCOMMIT=1;开启自动提交模式 MYSQ

chi15733896278的博客 305

数据库应用——MySQL事务和索引

事务和索引什么是事务执行事务模拟事务索引索引的分类测试索引创建测试表创建索引索引原则 什么是事务 要么都成功,要么都失败 就是将一组SQL放在一个批次中去执行 事务原则:ACID 原则 原子性,一致性,隔离性,持久性 脏读 幻读 博客参考连接:大佬写的 原子性(Atomicity) 要么都成功,要么都失败 一致性(Consistency) 事务前后的数据完整性要保证一致 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,

Cantevenl的博客 4865

MySQL事务、索引、 数据恢复和备份

MySQL的事务处理 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 事务的特性 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) MySQL的事务实现方法 SET AUTOCOMMIT 使用SET语句来改变自动提交模式 SET AUTOCOMMIT = 0; # 关闭自动提交模式 SET AUTOCOMMIT = 1; # 开启自动提交模式 MySQL中默认是

子清的博客 270

【MySQL】索引& 事务

索引可以非常显著地提高数据查 询的速度,数据表里包含的数据越多,效果越显著。我们应该选择经常被用做筛选条件的 字段来创建索引,这样才能通过索引缩小实际读取数据表中数据的范围,发挥出索引的优 势。如果有多个筛选的字段,而且经常一起出现,也可以用多个字段来创建组合索引。

2401_89791386的博客 504

MySQL数据库索引(Index)、事务(Transaction)、引擎(Engine)

索引 开始提交 提交 结束提交 当前事务撤销 标记原点 退回到目标原点

weixin_56422027的博客 727
上一篇: Mybatis-plus 代码自动生成 存档
下一篇: 编码、字符集编码、UTF8mb3/UTF8mb4
_nohave
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值