MySql索引简单知识点及事务的分析

news2024/10/5 16:22:47

目录

索引

什么是MySql索引?

索引的易忽略点

基本操作:

查看索引

 创建索引

删除索引

索引在MySql中的数据结构

事务

使用方法

事务的核心特性

隔离性

隔离的常见问题

***MySql四个隔离级别



📌————本章重点————📌

基本操作

索引在MySql中的数据结构

事务

MySql四个隔离级别
 ✨————————————✨

索引

什么是MySql索引?

        索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构。包含着对数据表里所有记录的引用指针。

索引的易忽略点:

  1.         索引相当于书的目录,可以加快查找的速度,但同时也提高了增、删、改的开销;
     
  2.         索引也提高了空间的开销,构造索引也就需要额外的硬盘空间来保存;
     
  3.         数据库的索引与数组的索引没有任何关系。只不过都是使用了index这样的术语。实际            上数组的index一般翻译成下标,而数据库的index一般翻译成索引


基本操作:

查看索引:

show index from  + 表名;

 创建索引:

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

 值得注意的是:如果表里有主键、unique、foreign key这些约束,就会自动为这一列创建索引;

注意:

  • 最好是在创建表之初就把索引创建好。否则,如果针对一个已经有很多记录的表来创建索引是危险操作,因为频繁创建于访问会增加 IO 负担;
  • 索引创建好之后,不需要手动使用,直接查询的时候就会自动来走索引;
  • SQL是通过 数据库的 “执行引擎” 来进行执行的,执行引擎会自动评估哪种方案是是最快的,所以是否走索引以及是如何走的,都是不便预期的,但可以使用explain关键字,来显示出查询的过程以及具体使用索引的情况;

删除索引:

drop index + 索引名 + on + 表名;

 删除索引也建议在创建表之初就规划好,也是危险操作。


索引在MySql中的数据结构:

        其实,B树已经可以比二叉树更适合于做数据库的索引了,但还是不够,又引入了B+树,是对B树进行了进一步的改进;

如图所示:

  • 作为一个 N 叉搜索树,高度降低下来,比较的时候,硬盘 IO 次数就少了;
  • 叶子结点之间通过链表链接,更适合范围查询;
  • 所有的查询都要落在叶子结点上,无论查询哪个元素,中间的比较次数都差不多,查询操作比较均衡;
  • 如果有的表不只是有主键索引,还有别的非主键列也有索引,这个情况就会构造另一棵B+树,此时需要先查一遍索引列的 B+ 树,再查一遍主键列的 B+ 树,称之为“回表”;


事务

介绍:

       1. 一个事务可以是一条SQL语句,一组SQL语句或整个程序。 事务可以把多个SQL打包到一起,变成一个整体。

        2.事务是恢复和并发控制的基本单位。如何理解? 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。如果失败,就会回滚到最初的状态;简单而言即为如果一个事务进行的整个过程不出现错误而顺利执行到终止,如果中途遇到错误,就会终止进行并恢复到事务初始状态。

使用方法:

第一步:开启事务 start transaction;

第二步:执行多条语句;

第三步:回滚或提交:rollback 或 commit;

(rollback即全部失败,commit即全部成功)

事务的核心特性:

1.原子性:

        上面已经介绍到,事务可以将多个SQL打包起来,因此就具有原子性;

2.一致性:

        事务执行前后都得是数据合法的状态;

3.持久性:

        事务对SQL数据的记录总是与硬盘同步;

4.隔离性:

        同时执行多个事务时,事务之间的影响程度,下面将具体介绍;

隔离性:

 当多个客户端之间同时发起事务时:

    如果隔离性越高,就意味着事务之间的并发程度越低,执行效率越慢,但数据的准确性越高;

    如果隔离性越低,就意味着事务之间的并发程度越高,执行效率越快,但数据的准确性越低;

隔离的常见问题:

1.“脏读问题”:读到了错误数据;
        例如:当我们从数据来源处读取了一段信息,但读取过后,来源处的这些信息又被改掉了或被删除了,这样就会发生脏读问题。
     解决办法:降低并发性,提高隔离性,对“写操作”加锁。这样一来写的过程中不可读,写完了才可以读,就保证了安全性。同时这样操作花费的时间更长,但提高了数据来源的准确性。

2.“不可重复读问题”:在一个事务中,第一次读取到的数据在第二次读取过程中被修改。

        解决办法:对 “读操作” 上锁。读的过程中不能写。

        既然有“写上锁”和“读上锁”,那上锁的过程中,另一方就不能闲着呀,所以就有这样的写法:上面这些是针对同一个代码文件而言的,但是除此之外,我们可以让闲着的部分去处理其他文件,这样操作的话又可能会导致原来读到的代码没变,但文件数量变了;

3.“幻读”问题:在同一个事务中,两次读到的结果集不同。

        解决办法:串行化,彻底舍弃并发


***MySql四个隔离级别:

        既然事务中会出现上述的隔离问题,因此mysql提供了四个档位供我们使用,以适应不同环境下来对效率和安全性做取舍。

1.read uncommitted :

        不做任何限制,事务之前都是随意并发执行的,并发程度最高,隔离性最低;

        (会产生脏读+不可重复度+幻读)

2.read committed:

        对写操作加锁,并发程度降低了,隔离性提高了;
        (解决了 脏读 问题,但仍然存在 不可重复读 + 幻读 问题)

3.repeatable read:

        对写和读都加锁了,并发程度又降低了,隔离性又提高了;
        (解决了脏读 + 不可重复读,但可能存在幻读问题)

4.serializable:

        严格串行化,并发程度最低(串行执行的),隔离性最高,执行速度最慢;
        (解决了 脏读  + 不可重复度 + 幻读问题)

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

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

相关文章

微软艰难的2022安全年回顾

©网络研究院 这些是管理员需要了解的 2022 年以来最重要的漏洞和修复。 我们即将结束 2022 年的安全年。只有时间会告诉我们 2023 年会发生什么,但对于 Microsoft 网络的 IT 和安全管理员来说,2022 年是混合攻击、本地 Exchange Server 缺陷和需要…

【Python】向量叉积和凸包 | 引射线法 | 葛立恒扫描法

猛戳!跟哥们一起玩蛇啊 👉 《一起玩蛇》🐍 💭 写在前面:这个系列似乎反响不错, 所以我继续水下去 (bushi)。本篇博客是关于经典的 Cross Product and Convex Hull (向量叉…

最大正方形问题

最大正方形问题 作者:Grey 原文地址: 博客园:最大正方形问题 CSDN:最大正方形问题 题目描述 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。 题目链接见&am…

数字式压力闭环放大器|比例溢流阀闭环控制器

控制不同带压力反馈信号输入(0~10V或4~20mA)比例压力阀、比例溢流阀、比例节流阀、比例插装阀,带位置反馈信号输入比例流量阀等。斜坡上升和下降时间独立调整(0.05~10 s)。10V参考电压输出外部电位器控制。最大驱动电流 0.4~3A,最…

4个月高效学习,我是如何从手工测试做到测试开发的?

向上的路很难走,但一旦踏上去,每一步都算数! 为什么必须转型为测试开发? 不懂开发的手工测试是新时代“文盲” 在移动互联网和大数据时代,为满足市场和业务需求,互联网应用既要实现产品功能快速迭代&…

java字符串中常用的10个方法

文章目录前言一、字符串的构造1.使用常量进行直接赋值构造2.使用new String对象3.使用字符数组进行构造二、字符串的比较1.比较2.equals方法比较3. compareTo方法比较4.compareToIgnoreCase(String str)方法三、字符串的查找1.charAt(int index)方法2.indexOf(String str)方法四…

网络流量分析帮助企业提升OA应用性能(二)

需求简介 某外高桥公司的OA系统是其重要的业务系统,OA系统负责人表示,部分用户反馈,访问OA系统时比较慢。需要通过分析系统看一下实际情况。 信息部已对企业领导定义了独立的组,本次要主动分析领导们的使用体验快慢。如果OA系统…

mmdetection3d S3DIS (持续更新)

Mmdetection3d集成了大量3D深度学习算法,其中很大一部分可以在室内三维数据集S3DIS上运行。本节重点介绍S3DIS数据集及其在mmdetection3d中的预处理程序。 1 S3DIS S3DIS(Stanford Large-Scale 3D Indoor Spaces Dataset )数据集是斯坦福大学…

【R语言】白葡萄酒的EDA分析

白葡萄酒的EDA分析1.项目相关信息1.1 评估标准1.2 项目模板1.3 数据集列表1.4 项目示例1.5 数据选择1.5.1 选择1.5.2 详细数据说明1.5.3 有关项目提交的常见问题2.环境准备2.1 导入相关包2.2 加载数据集2 数据整理2.1 数据评估2.1.1 质量类问题2.1.2 结构性问题2.1 数据清洗2.1…

二叉树的代码实现和详解

树的定义 树是由n(n>1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 树具有以下特点: 1.每个结点有零个或多个子结点; 2.没有父…

ROS action简单使用示例

1、为什么要用action 在ros中,大部分情况下的信息我们使用publisher与subscriber的机制来处理,也就是topic的机制。它能处理一些不用带状态返回的数据处理。当涉及到需要数据返回的节点间数据交互时,首选也可以采用servicer的机制进行处理与…

图解Redisson如何实现分布式锁、锁续约?

文章目录一、基础0)Redisson版本说明、案例案例1)Redisson连接Redis的方式2)用到的Redis命令3)用到的lua脚本语义二、源码分析1、RLock获取RLock对象2、加锁流程0)加锁流程图1)加锁到哪台机器2)…

一行代码获取股票、基金数据,并绘制K线图

大家好,今天这篇文章和大家分享一下如何利用Python获取股票、基金数据,并进行可视化,为金融分析&可视化先导篇,欢迎大家学习、点赞、收藏支持。 一、基础准备 环境:python 3.7 需要安装第三方模块:mpl…

Spring源码深度解析:十六、@Aspect方式的AOP下篇 - createProxy

一、前言 文章目录:Spring源码深度解析:文章目录 我们上篇已经分析到了 Spring将已经找到所有适用于当前bean 的Advisor 集合。下面就要创建代理对象了,而代理对象的创建是从 AbstractAutoProxyCreator#createProxy()开始。下面我们就来看看…

Spring Cloud实现Zuul自带的Debug功能

Zuul 中自带了一个 DebugFilter,一开始笔者也没明白这个 DebugFilter 有什么用,看名称很容易理解,它是用来调试的,可是你看它的源码几乎没什么逻辑,就 set 了两个值而已,代码如下所示。 Overridepublic Obj…

流媒体协议分析之webrtc之rtcp

TCP作为RTP控制协议,对于弱网下音视频质量和会话控制具有重要的作用。 1. RTCP Header V:RTCP的版本号,一定等于2; P:如果设置,填充位表示数据包包含末尾的附加填充八位字节,不属于控制信息&am…

CV-对比学习:概述【通过自监督学习,充分挖掘模型从海量无标注数据中学习通用知识的能力】

对比学习从目标来看,是要做在NLP类型类似Bert预训练的事,即通过自监督学习,充分挖掘模型从海量无标注数据中学习通用知识的能力。 大致分类 对比学习目前可大致可分为 基于负例的对比学习方法基于对比聚类的方法基于不对称网络结构的方法基…

PLC SECS/GEM解决方案,设计与应用

1 适用性 金南瓜SECS是最适应于全自动智能设备的选择。 适用行业:半导体、光伏、PCB等 全面支持E5、E30、E37、E40、E87、E90、E94、E116 PLC SECS/GEM具有怪兽级的强劲性能,处理性能高达10ms/条,全面升级的高适应性,易用友好的S…

30.前端笔记-CSS-CSS3的新特性

1、CSS3新增选择器 属性选择器,权重为10结构伪类选择器,权重为10伪元素选择器,权重为10 1.1 属性选择器 用属性选择器可以不用借助类或id选择器 语法: 正则表达式:^表示开头,$表示结尾,*表示任意 /*标…

怎么提高客服人员效率?

为了给客户提供更好的服务,很多企业会为自己网站配置客服服务,方便随时和客户沟通。但是凡事有利便有弊。虽然和客户接触的机会变多了,但是沟通不及时、回答不专业、问题处理时间长等问题也可能随之出现,反而会给客户带来不好的印…