MySQL的索引事务

索引

是什么

类似于目录,提高查询的速度,但是本身会占用空间,增删数据的时候也需要维护索引。所以查询操作频繁的时候可以创建索引。如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。

创建主键约束(primary key),唯一约束(unique),外键约束(foreign key)时会自动创建对应列索引。

查询索引  

show index   from  表名;

创建索引

当数据库的数据量很大时,创建和删除索引是很危险的操作,会大量消耗CPU,IO等资源,可能导致数据库卡死。所以要在放入数据之前,或者数据库中的数据量不大时创建索引。如果要给一个数据量很大的数据库添加索引,就需要再准备一个服务器,在空的数据库中创建好索引,将另一个数据库的数据慢慢导入这个空的数据库里。

create   index   索引名   on    表名(列名 );//底层是创建出一棵独立的B+树来组织索引,跟主键的B+树没有关联。是两棵独立的树。

删除索引

drop index   索引名    on   表名 ;

底层结构

数据库的索引是用B+树表示存储的。

B+树结构


仅叶子节点存储数据并通过链表指针连接(叶子节点从左到右是有序的,且存储在一块连续内存空间,避免频繁访问硬盘,一次硬盘IO就能读出整个节点数据;访问的数据都在叶子节点,树高一样,则每次查询次数是稳定的);

非叶子节点存储键,键值为其叶子节点中的最大值(方便进行范围查询,锁定叶子节点中数据的位置);

当叶子节点个数达到阈值,会进行分叉。(索引在内存中,个数增加了对速度影响不大,但叶子节点存在硬盘中,访问硬盘的速度比访问内存满很多,所以要进行分叉,根据索引查找数据时范围更精确)

1.N叉搜索树(多叉树可以控制树的高度)

2.父节点以叶子节点中最大值的形式存在(快速锁定子树的数据范围)

3.叶子节点这一层用链表结构连上,不用再回溯到父节点。(范围查寻更高效)

4.数据存储在叶子节点,索引存在非叶子节点中,因为占用空间小,索引就存在内存中。(索引在内存中加快查找速度)

为什么用B+树,不用其他数据结构?

AVL树是严格的自平衡二叉搜索树(子树高度差不能超过1),随便进行一下增删改就会触发AVL树旋转。每一次旋转都有对应的开销,所以用AVL树除了查询外,其他操作的效率不高,每一次增删都需要维护树的平衡;

而红黑树虽然旋转的概率没有AVL树高,但他是二叉树,当数据量很大时,树的高度就会很高,高度每增加一层,查询比较次数就多一次,而数据库数据索引是存储在硬盘上的,每一次对硬盘的IO操作很耗时间,查询的速度就会慢很多;

hash表存储数据是无序的,不能进行范围查询(不能用>或者<找到一个范围的数据),只能比较相同key值的数据,因为经过hash函数的计算,原来key之间的大小关系 已经不能通过计算出来的hash值反应了。

事务

什么是事务

当实现一个目的需要多个sql语句执行时,将这些sql语句打包成的一个整体,称作事务。事务中的sql语句要么全部执行成功,要么全部失败。对于转账这类场景,开启事务更能保证安全。当A给B转账500,A的账号-500,如果设备发生故障,sql没执行完,B的账户没有+500,如果没有开启事务,那么这500就消失了。开启事务后,出现故障后,会撤销对A账户执行的操作,将A账号的金额还原到转账前。

使用

1.start  transaction ;//开启事务

2.中间执行多个sql语句

3.rollback或commit  

rollback表示回滚,中间的sql语句全部执行失败,commit表示提交,sql全部执行成功。

进行回滚了,name为a的数据没有插入成功。

基本特性
1.原子性

事务里的sql语句执行要么都成功执行,要么都不执行。当一部分sql语句执行成功,出现网络崩溃,计算机死机,主机掉电等操作时,像网络崩溃这种不影响数据库的,则会执行回滚操作,将已经执行的sql语句造成的影响恢复到没执行时候的情况。当事务执行时,sql语句会记录在mysql日志中,像主机掉电这种情况,数据库没办法运行的时候,也不影响执行回滚操作,当电来了,恢复正常,数据库会根据日志信息执行回滚。

2.一致性

执行事务之后,数据能对得上;事务没执行成功,执行回滚后,能与执行事务之前数据一样。

3.持久性

持久性指数据被存在硬盘上,主机/程序重启后,数据依然存在。事务执行具有持久性,对数据库造成的修改,会保存在硬盘上持久存在。

4.隔离性

在执行并发操作时存在的概念。隔离性提高,并发能力就降低,数据库服务器执行效率就会降低,但数据准确性会提高 。当多个客户端同时对服务器发起事务时,可能存在下面几种情况

1.脏读问题:读取到其他事务未提交的数据

当执行事务A对某一张表做一些修改时,事务B在事务A还没执行完就来读取这张表的数据,但是B这时读取的表的数据是临时的,B如果基于这个临时数据进行一些操作,结果可能不正确。这样导致的问题称作脏读问题,这个临时数据也称‘脏数据’。

2.不可重复读问题:指同一事务内相同查询条件多次执行结果不同(数据值被修改)

当事务B有多个读的操作时,有一个事务C要对这张 表做修改,这样可能导致事务B多个读的结果前后不一致。

3.幻读问题:指同一事务内相同范围查询返回的行数发生变化(新增或删除行),这是不可重复读的特殊情况。

MySQL 的四个隔离等级

可以在MySQL的配置文件中设置等级

1.read uncommitted:允许读取其他事务未提交的数据  ;//存在脏读+不可重复读+幻读,

这样就是降低了并发时事务之间的影响,提高了隔离性,牺牲了部分效率,提高了数据准确性。

2.read  committed:只能读取其他事务提交后的数据;//解决脏读 ,存在不可重复读+幻读,进一步降低了并发性,提高安全性。

3.repeatable  read: 针对读和写操作都加锁了;//解决了脏读+不可重复读,存在幻读问题 (MySQL默认隔离等级)

4.串行化(serialiable) :所有事务串行执行;//严格的一个接一个执行,这时完全没有并发,也就不存在上诉三个问题;隔离性是最高的,效率是最低的。

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

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

相关文章

安卓9.0系统修改定制化____第三方美化 bug修复 移植相关 辅助工具 常识篇 八

在修改rom中。有时候不可避免的需要对系统进行美化以及一些第三方系统的bug修复。在操作前需要了解系统的一些基本常识。例如同平台移植 跨平台移植以及内核移植 apk反编译等等相关的知识。今天解析的这款工具虽然不是直接面向安卓9.0.但对于了解以上的一些必备常识还是不错的 …

云服务器与物理服务器对比:选择最适合的业务服务器解决方案

更多云服务器知识&#xff0c;尽在hostol.com 在现代 IT 基础设施中&#xff0c;云服务器与物理服务器是两种常见的服务器解决方案。随着云计算技术的迅猛发展&#xff0c;越来越多的企业开始转向云服务器&#xff0c;但也有一些企业仍然坚持使用物理服务器&#xff0c;尤其是…

【redis使用场景——缓存——双写一致性】

redis使用场景——缓存——双写一致性 双写一致性问题的本质与场景典型不一致场景分析​​并发写操作导致的不一致​​​​读写交叉导致的不一致​​​​主从同步延迟导致的不一致​​ 解决延迟双删策略&#xff08;推荐&#xff09;优点​​&#xff1a;​​缺点​​&#xff…

【ArcGIS】在线影像底图调用

【ArcGIS】在线影像底图调用 一、 历史影像的调用二、ArcGIS online底图调用三、结语 一、 历史影像的调用 ESRI官方推出了World Imagery Wayback是一个提供全球范围内历史影像的在线服务。 官网地址&#xff1a;https://livingatlas.arcgis.com/wayback/ 操作步骤&#xff1…

密度估计:从零星足迹重建整体画像

想象你是一位侦探&#xff0c;案发现场只留下几个零散的脚印。**如何通过这些碎片&#xff0c;推断嫌疑人的身高体重&#xff1f;甚至预测他下一步的藏身之处&#xff1f;** 这种从局部反推整体的能力&#xff0c;正是**密度估计&#xff08;Density Estimation&#xff09;** …

B004基于STM32F401单片机简易交通灯实训数码管显示设计仿真资料

视频演示地址:https://www.bilibili.com/video/BV1GvNDzFEd9/ 运行环境 仿真软件:proteus8.17(切记别的版本不能运行) 编程软件:MDK525 STM32 cubmx版本:6.11.1(切记别的版本不能运行) 原理图画图软件:AD10 功能说明&#xff1a; 以STM32F401CB单片机为核心简易交通灯功能如下。…

没掌握的知识点记录

1、微内核的主要优点在于结构清晰、内核代码量少&#xff0c;安全性和可靠性高、可移植性强、可伸缩性、可扩展性高&#xff1b;其缺点是难以进行良好的整体优化、进程间互相通信的开销大、内核功能代码不能被直接调用而带来服务的效率低。 2、题目&#xff1a; 分页内存管理…

linux 远程终端执行qt应用显示到接入的物理显示器上

在显示器打开终端执行&#xff1a; xhost local: 在远程终端执行&#xff1a; export DISPLAY:0然后在终端执行qt应用就可以。 xhost local: 功能&#xff1a;允许本地用户&#xff08;local:&#xff09;访问 X 服务器&#xff08;X11 图形系统&#xff09;。 原理&#xf…

【AI驱动网络】

一、AI 驱动网络 1.1 什么是网络 1.1.1、网络的定义 ​网络是由若干节点​(如计算机、服务器、移动设备等)和连接这些节点的链路​(有线或无线传输介质)构成的系统,用于实现地理位置分散的独立设备之间的信息交换、资源共享与协同工作。在计算机领域,网络是信息传输、…

Python期末速成

一.基础内容 赋值语句&#xff1a; a 1 b "mayday" 标识符规则&#xff1a; 1.字母&#xff0c;数字&#xff0c;下划线&#xff0c;汉字组成。但数字不能开头 2.不能是保留字 3.特殊符号不行&#xff0c;*&#xffe5;^等 注释是在语句前面加&#xff03; …

【时时三省】(C语言基础)指针变量例子

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 存放地址的变量是指针变量&#xff0c;它用来指向另一个对象&#xff08;如变量、数组、函数等&#xff09;。 那么&#xff0c;怎样定义和使用指针变量呢? 先分析一个例子。 例题 通过…

MATLAB代码演示,TDOA定位的优化算法,提升Z轴的定位精度|复现《基于最小二乘法的室内三维定位算法研究》

本文复现文章: 王桂杰,焦良葆,曹雪虹.基于最小二乘法的室内三维定位算法研究[J].计算机技术与发展,2020,30(04):69-73.按照文章的核心算法,复现了TDOA下的最小二乘在三维环境中的改进定位方法,方法可以明显提升Z轴的定位精度 文章目录 概述运行结果展示matlab代码完整代码概…

React useState 原理

Fiber架构 React16 之后 提升显示性能 电脑屏幕参数刷新率 表示1s刷新次数 页面渲染 和 JS代码执行 共享一个线程 互斥 保持上一帧图像表现&#xff1a;卡顿 reconcilier改为 stack 和 fiber Fiber数据结构 执行单元 浏览器优先执行用户响应相关或者界面渲染相关事件&#…

【Datawhale组队学习202506】零基础学爬虫 01 初始爬虫

系列文章目录 01 初始爬虫 02 数据解析与提取 文章目录 系列文章目录前言1 爬虫和Python2 爬虫的矛盾2.1 爬虫与反爬2.2 robots核心字段重要规则说明非标准扩展指令协议生效条件局限性验证工具 2.3 一个爬虫demo 3 Web请求与HTTP协议3.1 一个web请求的全过程3.2 判断页面源代码…

前端面试十之vuex

Vuex 是一个专为 Vue.js 应用程序设计的状态管理模式和库&#xff0c;它集中管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。以下是关于 Vuex 的详细介绍&#xff1a; 1. 核心概念 State&#xff08;状态&#xff09; 它是 Vuex 中存…

Django中为api自定义一些装饰器:如参数校验等

在Django中使用了rest_framework时&#xff0c;一般我们会定义ModelSerializer来校验request.data中参数是否存在和参数类型。 但当我们只是想简单校验一些api的url上是否存在某些参数时&#xff0c;该怎么办&#xff1f;当然我们也可以通过定义Serializer来实现&#xff0c;但…

uni-app项目实战笔记21--uniapp缓存的写入和读取

一、缓存的写入 uni.setStorageSync("storageClassList",classifyList.value) 二、缓存的读取&#xff0c;如果缓存不存在&#xff0c;则返回空数组 const storageClassList uni.getStorageSync("storageClassList") || []; 三、对读取到的数据进行转…

Zama密码分析资助计划

1. 引言 2025年5月&#xff0c;Zama团队正式启动了 Zama 密码分析资助计划&#xff08;Cryptanalysis Grant Program&#xff09;&#xff0c;以支持那些致力于“破解”系统的研究人员&#xff1a; 无论是通过密码分析、侧信道攻击、故障注入&#xff0c;还是其他创新性方法。…

【数据结构与算法】数据结构初阶:详解顺序表和链表(一)

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人生格言&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平 前言&am…

Arrays.asList() 的不可变陷阱:问题、原理与解决方案

&#x1f6a8; Arrays.asList() 的不可变陷阱&#xff1a;问题、原理与解决方案 #Java集合 #开发陷阱 #源码解析 #编程技巧 一、问题现象&#xff1a;无法修改的集合 当开发者使用 Arrays.asList() 转换数组为集合时&#xff0c;尝试添加/删除元素会抛出异常&#xff1a; St…