【MySQL】索引与事务

news2025/1/22 21:06:11

索引:

什么是索引?为什么要⽤索引
为了提高查询效率而使用的一种数据结构把数据组织起来;
例如生活中的字典:声母,韵母,声调。
    创建索引:
自动创建的主键约束,唯一约束,外键约束时,会自动创建对应列的索引;

create index 索引名 on 表名(字段名1,…);


一张表里至少有一个索引;主键索引又叫聚簇索引。

    索引分类:

  • 按使用场景分:普通索引,主键索引,唯一索引,全文索引;
  • 按数据组织方式分:聚簇索引,非聚簇索引;
  • 还有一种数据查找过程中出现的现象叫索引覆盖。

主键索引,手动创建索引,默认索引,唯一索引。
索引一般创建在频繁查询的列上,而且这个列的值重复值很少。
    查看索引:

show index from 表名;


    删除索引:

drop index 索引名 on 表名;


    可以使用explain来进行查看SQL的执行

explain select * from 表名 where 条件;


    索引使用的数据结构是什么?


1.HASH

查询的时间复杂度O(1)
MySQL没有使用HASH作为索引的数据结构;
HASH不支持范围查找;


2.二叉搜索树
时间复杂度O(N),O(logN)
红黑树是O(logN),红黑树可以动态调整树高,不会出现单边树情况;
但是他没有办法控制树的高度,树的高度决定了磁盘的访问次数,每向孩子节点访问一级,就发生磁盘IO,而在一个系统中,对性能影响最大的就是磁盘IO


3.N叉搜索B树 


可以规定每⼀个节点可以存多少个元素,当节点中达到了规定的元素个数时,才去调整,B树就可以解决树⾼的问题,那么N叉搜索树可以做为索引的数据结构吗,看上去好像是可以的,但是Mysql没有选这种数据结构,⽽是在这B树的基础上⼜做了优化。


4.B+树

 

 

通过观察可以发现

  1.   ⾮叶⼦节点中的每个数据都存在于叶⼦节点中,并且都是对应所在叶⼦节点中的第⼀条数据
  2.   Mysql中的B+树是⼀个循环双向链表,相邻节点是通过双向链表连接的,这样组织数据更有利⽤范围查找
  3.   最重要的是,叶⼦节点中的数据是有序的
  4.   N叉搜索树,有效的降低了树的⾼度,从⽽减少了磁盘IO次数
  5.   对于B+树⽽⾔,在相同树⾼的情况下,查找任⼀元素的时间复杂度都⼀样,中间⽐较次数也差不多,也就是说性能均衡,只要控制树⾼,就可以达到性能可控的效果
  6.   只有叶⼦⻚点存储了真实完整的数据,⾮叶⼦⻚点,只保存了主键(索引)的值和⼦节点的引⽤

索引补充:

  •   一个索引包含多个字段就叫组合索引;create index 索引名 on 表名(字段名1,字段名2);
  •   在查询时一定要在where条件中按索引顺序写过滤条件,使用索引的最左原则;
  •   如果索引中包含要查询的所有列,那么直接从索引中返回结果,叫做索引覆盖;
  •   当查询列表为*或索引不能满足查询结果,那么会使用id到主键索引中查询完整的结果,主键索引中包含当前数据行中所有列的值,叫做回表查询。

索引失效:

  1.   最左原则:类似于字典的⽬录,这就是⼀个典型的复合索引
  2.   判断不等:每个都要判断
  3.   类型转换:与原类型不符
  4.   like '%xxx':第⼀个字符都不能确定,怎么去索引中⽐较呢?
  5.   索引列运算 age + 1:改了原来的值
  6.   is null 或 is not null : 全表扫描了

事务:

什么是事务
把一组SQL语句打包运行,要么全部执行要么全部不执行。


开启事务:

start transaction;


回滚或提交:

rollback/commit;


    事务特性:


  1.原子性(atomicity)


事务中的SQL要么都执⾏要么都不执⾏,通过commit/rollback控制。


  2.⼀致性(Consistency)


官⽹上描述:数据库从⼀个⼀致性状态变换到另外⼀个⼀致性状态。
事务执⾏之前与执⾏之后,要保持的正确的结果,可以⽤转账说明


  3.隔离性(Isolation)


多个事务执⾏的过程中不能互相⼲扰


  4.持久性(Durability)


事务⼀旦提交就会写⼊磁盘永久保留,即使是数据库服务故障也不会影响数据的内容


    事务的隔离级别:
对并发访问的⼀种限制
如果隔离级别越低,那么可以⽀持同时访问的客户端数就越多,性能变⾼,数据安全性变低;
如果隔离级别越⾼,那么可以⽀持同时访问的客户端数就越少,性能变低,数据安全性变⾼;

隔离级别分类:


    不同隔离级别的现象:


  脏读:

事务B读到了另⼀个事务A还没有提交的数据,当事务A回滚后,事务中所有的修改都回滚了,那么事务B读到的数据就没有意义了,把这个称之为脏读;


要解决脏读问题,就要给⼀个写操作的事务加上⼀把锁,在写这个事务从开始时加锁,事务提交或回滚的时候释放锁,被加锁的事务不能与其他事务共存,写锁也叫排他锁。

 


  不可重复读:

当⼀个新的事务A在读⼀条记录时,另⼀个事务B对这条记录做出了修改,当事务A再次读这条记录时,就发现两次读到的结果不⼀致,那么这种情况就是不可重复读;


给读的事务也加上⼀把锁,但是这个锁是⼀把读锁(共享锁),多个读锁可以共存,但是由于写锁是排他锁,所以读锁不能与写锁共存,也就是说,在加了读锁之后,不能进⾏写操作。

 


  幻读:

当事务A去查询所有记录时,事务B往这个表中添加了条新的记录,当然也可以删除,那么事务A再去查询所有记录时,发现与上⼀次查到的所有记录条数不⼀致,或多或少,这种现象就是幻读。


MySQL数据事务的默认隔离级别虽然是可重复读,但是最⼤限度的解决了幻读问题,但是并没有完全解决。

 

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

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

相关文章

qiankun-微前端

项目结构 主应用: vue3 vite 子应用1:vue3 vite 背景介绍 项目采用了vue3vite构建的,又因为qiankun不支持vite,所以需要引用 vite-plugin-qiankun 插件来解决 主应用–改造 安装 qiankun npm install qiankun重新定义一个…

浅浅入门SpringBoot之Thymeleaf模板

Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP语言体系下也有模板引擎,甚至在 Javascript中也会用到模板引擎技术,Java生态下的模板引擎有 Thymeleaf、 Freemaker、Ⅴ elocity、…

【EMQX】EMQX管理控制台即EMQX Dashboard简介

EMQX管理控制台 一、EMQX Dashboard简介二、主要功能2.1 监控和管理 EMQX 集群中的相关信息与数据2.2 访问控制(认证与授权)管理2.3 数据集成2.4 在线配置热更新2.5 管理系统扩展能力2.6 全面的诊断工具 三、启动3.1 首次登录3.2 忘记密码 四、配置 Dash…

我老板:你根本不懂 React!

前言 我已经使用 React 多年,我确信我非常了解它,但最近我的老板对我说,“你根本不知道 React,你对它一无所知。” 我很生他的气,但他指出了我程序中的三个漏洞。我现在把它记录下来,也分享给还不知道的小…

用好ChatGPT,毕业直接走上人生巅峰

毕业论文交上去了,学分也攒齐了。考研没上岸的准毕业生们接下来要面对的不是惨烈的秋招,就是蹲家准备二战。生活终于要对各位小可爱们动手啦! 不想默默承受社会的毒打? 不愿在屡战屡败屡败屡战的压力下秃头? 想必各位…

API 都有这些功能,你真的都知道么?

API(应用程序编程接口)可以提供以下功能: 数据传输:API可以在应用程序之间传输数据,包括发送和获取数据、更新数据等。 访问功能: API 可以调用另一个系统或应用程序的某些功能,例如获取天气,查…

基于无线传感器网络(WSN) 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本代码基于无线传感器网络,在两个节点(源节点和目标节点)之间找到最短路径,并开…

Java学习过程(韩顺平661-665)

网络通信是指在计算机网络中,通过网络连接的设备之间进行数据交换的过程。网络通信可以分为两种类型:有线网络通信和无线网络通信。 有线网络通信主要通过物理介质(如光纤、双绞线等)来传输数据,其中最常用的协议是以…

数字孪生新能源智慧充电桩Web3D可视化运维系统

放眼全球,近十年来,新能源汽车赛道堪称“热得发烫”。伴随着进入成年期的新能源汽车行业对相关配套设备支撑水平的提升,作为其“新基建”的充电桩领域表现更为突出的价值势能。过去,在一系列补贴政策和资本刺激下,充电…

七种MOS管栅极驱动电路

01 直接驱动 首先说一下电源IC直接驱动,下图是我们最常用的直接驱动方式,在这类方式中,我们由于驱动电路未做过多处理,因此我们进行PCB LAYOUT时要尽量进行优化。如缩短IC至MOSFET的栅极走线长度,增加走线宽度&#x…

《商用密码应用与安全性评估》第三章商用密码标准与产品应用3.4商用密码标准与产品

一、智能IC卡标准与产品 智能IC卡的分类 存储器卡:内部一般不包含密码安全机制,不具备信息处理能力,外部可对片内信息任意存取,因此存储器卡一般用于存放不需要保密的信息逻辑加密卡:逻辑加密卡内除了具有非易失性存…

redis缓存生产实践(一)---大key压缩

文章目录 前言一、缓存到底是使用String还是hash我该如何选择二、什么是大key及其影响2.1 什么是 Redis 大 key?2.2 大key带来的影响 三、大key压缩3.1 注解标记可能需要压缩的数据3.2 获取注解信息判断内存占用大小3.2 判断对象占用内存3.2 gzip压缩json3.2 判断当…

Reid之损失函数理论学习讲解

基于深度学习的Reid主要流程为输入图像-->CNN(提取特征)-->Global average pooling-->特征向量,将用这些特征来衡量图像的相似情况。并用这些特征进行检索,返回分类情况。 在训练网络的时候需要涉及损失函数,因此就引出了表征学习和…

大数据专业好找工作么

现在,在数字化转型的推动下,越来越多的企业意识到大数据的魅力,并不断在这个领域投入资金,Python大数据开发相关人才也备受青睐! 学Python之前:这玩意真有传说中那么好么? 学Python之后&#…

【browser】浏览器跨域处理

好久没有更新博客了,前段时间在疯狂面试,最近工作了才有时间来写博客。 准备来讲讲面试里常问到的跨域处理吧。 说到跨域,我们可能会下意思的说出jsonp,服务端配置cors,node配置代理等,再多了,我…

加密脱胎于去中心化理想,但力求合规 细数各国政府态度之演变

比特币诞生之始,只是极客文化圈内流行的小众货币。如今,加密市场已经发展到无法忽视的程度,虽然全球仍未对加密货币形成共识,但监管已成为各国政府不得不考虑的问题。 美国:监管愈发模糊且不可测 美国始终是加密领域全…

八股文(Mybatis)

文章目录 1. Mybatis缓存机制2. 动态SQL语句3. 分页3. 1 几种分页方式3.2 MyBatis 是如何进行分页的?分页插件的原理是什么?3.3 逻辑分页和物理分页 1. Mybatis缓存机制 作用:避免每次都去查db 一级缓存是SqlSession级别的缓存,也…

Mysql统计分组后每组数据与每组数量区别

下边统计的是分组后每组的数量:结果是多个 select p.id (count(*)) from p group by p.id 如果想统计分组后,有多个分组,需要如下执行: select count(*) from (select p.id (count(*)) from p group by p.id) as a 此外&#xf…

大数据之Hadoop数据仓库Hive

目录: 一、简介二、HQL的执行流程三、索引四、索引案例五、Hive常用DDL操作六、Hive 常用DML操作七、查询结果插入到表八、更新和删除操作待完善。。。 一、简介 Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表&#xff0c…