MySql索引事务讲解和(经典面试题)

                                       

  • 🎥 个人主页:Dikz12
  • 🔥个人专栏:MySql
  • 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香
  • 欢迎大家👍点赞✍评论⭐收藏

目录

索引

概念 

 索引的相关操作

索引内部数据结构 

 事务

 为什么使用事务?

 事务的使用

事务的特性

事务隔离级别


索引

 数据库使用select查询的时候:

1.先遍历表

2.把当前的行给带入到条件中,看条件是否成立

3.条件成立,这样行就保留;否则,跳过。

如果表非常大,这样的遍历成本就比较高,至少是O(n),每次读取一个数据都需要读取磁盘,开销是很大的。所以,就引入了索引,索引属于是针对查询操作 引入的优化手段,可以通过索引来加快查询速度,避免针对表进行遍历。

概念 

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。
 

 索引的相关操作

  创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

  •  查看索引
show index from 表名;

一个索引是针对一个列来指定的,只有针对这一列进行条件查询的时候,查询速度才能被索引优化!!!

  •  创建索引
create index 索引名 on 表名(字段名);

创建索引操作也是一个危险操作!

创建索引的时候,需要针对现有的数据,进行大规模的重新整理。如果这个表的本来就很大,创建索引,也很容易数据库服务器给卡住。

  • 删除索引 

 如果自动创建的索引(主键 / 外键 / unique),是不能删除的!

drop index 索引名 on 表名;

索引内部数据结构 

 

 数据库引入的索引是一个改进的树形结构B+树(N叉搜索树)

 了解B+树之前,还是要先了解下B树.

  • B树

 B树:也是N叉搜索树;

每个节点上有M个key,划分出M+1个区间;

进行查询的时候,就可以直接从根节点出发,判定当前要查的数据在节点上的那个区间,就决定好下一步往哪里走;

进行添加 / 删除元素就可能涉及到节点的拆分 / 节点的合并;

  • B+树 

B+树是堆B树的改进;可以说是针对数据库量身定做的。

 

1.B+树是一个N叉搜索树.一个节点上存在N个key,划分为N个空间.

2.每个节点上的N个key, 最后一个,就相当于当前子树的最大值.

3.父节点上的每个key 都会以最大值的身份在子节点的对应区间存在.(key可能会重复出现()

(就是叶子节点这一层,包含了整个树的数据全集)

4.B+树会使用 链表  这样的结构,把叶子节点串起来。

(就非常方便的完成数据集合的遍历并且也很方便从数据集合中按照范围取出一个“子集”)

经典面试题!!! 

B+树的优点(相对于B树以及哈希、红黑树):

1. N叉搜索树,树的高度有限的.降低IO的次数.

2.非常擅长范围查询.

3.所有查询最终都是要落到叶子节点.查询和查询之间的时间开销是稳定的.(不会出现这次快,下次慢)

4.由于叶子节点是全集,会把行数据只存储在叶子节点上;  非叶子节点只是存储一个用来排序的key.

 事务

 为什么使用事务?

 开发中经常会涉及到一些场景,需要"一气呵成" 的完成一些操作.比如:转账~

引入事务就是为了避免上诉问题,事务就可以把多个sql打包成一个整体,可以保证sql要么全部执行,要么就“一个都不执行” 。(一个都不执行:不是真的一个都不执行,而是失败之后,只是看起来好像都没执行,关键操作,就是‘“翻新”,数据库称为“回滚” -> rollback)。

 事务的使用

(1)开启事务:  start transaction;

(2)执行各种sql

  (3) 提交事务(结束):commit;

    主动触发回滚: rollback   => 出错,有很多中情况。

事务的使用,没什么说的,最重要的是事务背后的一些原理性质的内容!

也是经典的面试题!!!

事务的特性

1.原子性:回滚的方式,保证这一系列操作,都能执行正确,或者回复如初。

2.一致性:事务执行之前和之后,数据都不能太离谱。

3.持久性:事务做出修改,都是在硬盘上持久保存的,重启服务器,数据仍然是存在的,事务执行的修改仍然是有效的。

4.隔离性

前三个都是好理解的,第四个隔离性涉及比较多!!也就单独拿出说。

 隔离性: 数据库并发执行多个事务的时候,会涉及到一些问题.

并发执行:

并发程度越高,整体效率越高,隔离性越差,准确性越差!

 在并发执行时,涉及的问题:

1.脏读问题

     

解决脏读问题:核心思路就是,针对写操作加锁。 只能读写完之后提交的数据

并发性降低了,隔离性提高了,效率降低了,数据准确性提高了!

2. 不可重复读 : 如果事务A在内部多次读取一个数据的时候,出现不同的情况,这种就是不可重复读.( 事务A 在两次读之间,有一个事务B 修改了数据并提交了事务)。

解决方法:刚才写的时候加锁了,写的时候不能读,没说读的时候不能写,所以,需要给读操作也加锁。(写的时候不能读,读的时候不能写)

   3.幻读

解决方法:

效率      正确性  ==> 不同的需求场景 就有不同的要求

mysql服务器也提供了“隔离级别”,针对隔离级别程度进行设置,应对不同的需求场景。

上述内容就是事务的经典面试题!!

事务隔离级别

四种隔离级别,对应上面的三个问题,根据不同的业务场景,修改配置文件,设置不同的隔离级别。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软考】位示图

目录 一、基本概念二、位示图 一、基本概念 1.要将文件保存到外部存储器(外存或辅存),首先得知道存储空间的使用情况 2.要清楚哪个物理块已经被占用,哪个物理块是空闲的 3.当对大容量的磁盘存储空间被多用户共享时,用户…

深度学习——pycharm远程连接

目录 远程环境配置本地环境配置(注意看假设!!!这是很多博客里没写的)步骤1步骤2步骤2.1 配置Connection步骤2.2 配置Mappings 步骤3 配置本地项目的远程解释器技巧1 pycharm中远程终端连接技巧2 远程目录技巧3 上传代码文件技巧4 …

(二)MySQL安装与部署(redhat9)

前言 MySQL仅仅是一个产品,Oracle旗下的小型数据库。广泛应用在中小型项目中,特征体积小速度快整体成本低。尤其是开源,所以很多中小型项目为了降低成本纷纷选用MySql作为数控存储介质 MySql的特征 底层语言使用C、C编写的。并且使用多种编…

学单片机前先学什么?

学单片机前先学什么? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&#xff…

.git 文件夹结构解析

.git 文件夹结构解析 在这篇文章就让我们来看看这个 Git 仓库里的文件分别都是用来干什么的,以及在执行了相关的 Git 命令后这些文件会如何响应。 hooks(钩):存放一些shell脚本info:存放仓库的一些信息logs&#xff…

Laya2.13.3接入FGUI

下载与复制文件与Laya1.x类似,可以看我上一篇: Laya1.8.4接入FariyGui,以及其中踩的坑-CSDN博客 不同的是: 两个库文件需要在index.js中引入 新建一个脚本将fgui中搭建好的UI包引入: export default class GameApp…

JavaFX场景入门

目录 JAVAFX jdk1.8以上引入javafx类库 JDK11JAVAFX(eclipse) 小知识点 舞台Stage platform、screen类 Scene场景类 查看电脑屏幕宽高 Group容器 JAVAFX项目 Image javafx场景 javaFx文本 javaFX颜色 JAVAFX jdk1.8以上引入javafx类库 JDK11JAVAFX(eclipse) 方式…

通过Android Logcat分析firebase崩溃

参考:UnityIL2CPP包Crash闪退利用Android Logcat还原符号表堆栈日志 - 简书 一、安装Android Logcat插件 1、新建空白unity工程,打开PackageManager窗口,菜单栏Window/PackageManager 2、PackageManager中安装Android Logcat日志工具 3、安…

MODNet 剪枝再思考: 优化计算量的实验历程分享

目录 1 写在前面 2 模型分析 3 遇到问题 4 探索实验一 4.1 第一部分 4.2 第二部分 Error 1 Error 2 4.3 实验结果 ①参数量与计算量 ②模型大小 ③推理时延 5 探索实验二 5.1 LR Branch 5.2 HR Branch 5.2.1 初步分析 5.2.2 第一部分 enc2x 5.2.3 第二部分 en…

C++逆向分析--多态的本质

这篇我们延续上次的虚函数分析,来研究下多态的本质。 虚函数逆向分析的博客:C逆向分析--虚函数(多态的前置)-CSDN博客 有了上篇虚函数的知识,我们在正向开发学习的时候知道,多态的发生需要存在继承关系&a…

创意飞轮

创业初期最难的是确定好的创业方向,创意飞轮就是一种用来寻找、判断创业想法的心智模型。原文: The Ideation Flywheel 想出好的创业点子是很困难的,伟大的想法和完全糟糕的想法往往在一开始很难区分,糟糕的想法也许看起来会很诱人&#xff0…

深入探讨Python JSON库:兼容性与高级应用【第34篇—python:JSON库】

文章目录 深入探讨Python中的JSON处理技术引言官方json库进阶用法多说一句 第三方json库DemjsonOrjson Demjson库详解Orjson库的高级选项Python JSON库的兼容性考虑JSON类型映射兼容性处理解码时使用object_hook处理中文字符编码 多版本兼容 结语 深入探讨Python中的JSON处理技…

1.8 万 Star!这款 Nginx 可视化配置工具太强了

NginxConfig简介 Nginx Config 是一个强大的 Nginx 配置文件生成器,号称配置 Nginx 服务器所需的唯一工具。 正因为 Nginx 功能强大,所以针对其各个功能的配置项会显得特别多,对于我们来说要记住那么多配置是一件十分头疼的事,甚…

Springboot+vue的校园疫情防控系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的校园疫情防控系统(有报告),Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的校园疫情防控系统,采用M&#xff…

网络原理-初识(1)

目录 网络发展史 独立模式 网络互连 局域网LAN 广域网WAN 网络通信基础 IP地址 概念 格式 端口 概念 格式 认识协议 概念 作用 五元组 网络发展史 独立模式 独立模式:计算机之间相互独立; 网络互连 随着时代的发展,越来越需要计算机之间相互通信,共享软件和数…

【计算机网络】UDP协议与TCP协议

文章目录 一、端口号1.什么是端口号2.端口号范围划分3.认识知名端口号(Well-Know Port Number)4.netstat5.pidof 二、UDP协议1.UDP协议端格式2.UDP的特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 三、TCP协议1.TCP协议段格式1.1理解封装解包和分用1.2…

代码随想录算法训练营第14天 | 二叉树的前序、中序、后序遍历(递归+迭代法)

二叉树的理论基础:(二叉树的种类,存储方式,遍历方式 以及二叉树的定义) https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 二叉树的递归遍历 Leetcode对应的三道习…

使用骨传导耳机对人体有没有伤害?一文读懂骨传导耳机有什么危害?

不能说骨传导耳机对人体没有一点伤害,只能说骨传导耳机可以最大程度的减少对人体的伤害,首先就是骨传导耳机不用入耳,可以减少耳道内细菌的滋生,避免中耳炎等耳部疾病;其次就是骨传导的声音传播方式是通过骨骼直接进入…

Spring Boot 学习之——@SpringBootApplication注解(自动注解原理)

SpringBootApplication注解 springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 SpringBootApplication//标注在某个类上,表示这个类是SpringBoot…

thinkphp5向数据表插入数据并且获得id

$id db(数据表名)->insertGetId([status>1]); 直接...打印$id就是这条插入的数据的id了