MySQL的索引和事务

目录

1、索引

1.1 查看索引

1.2 创建索引

1.3 删除索引

1.4 索引的实现

2、事务


1、索引

索引等同于目录,属于针对查询操作的一个优化手段,可以通过索引来加快查询的速度,避免针对表进行遍历。

主键、unique和外键都是会自动生成索引的。

索引能提高查询的速度,但也是有代价的。

1、占用更多的空间,生成索引是需要一系列的数据结构,以及一系列的额外的数据来存储到硬盘空间。

2、可能会降低插入、修改、删除的速度。

1.1 查看索引

使用 show index from 表名; 来查看索引

例如:


1.2 创建索引

使用 create index 索引名 on 表名(列名); 来创建索引

例如:

注意:

创建索引时,如果表中的数据很多,创建索引容易使服务器卡住,就需要另一台机器,在MySQL中部署相同的表,创建所需要的索引,然后导入数据替换。


1.3 删除索引

使用 drop index 索引名 on 表名;来删除索引

自己创建的索引可以删除,如果是自动创建的索引,不能删除。

例如:


1.4 索引的实现

索引也是通过一定的数据结构实现的,MySQL的索引是一个改进的树形结构 B+树(N叉搜索树)。

B树

B树是通过区间来进行分支的,每个节点的度都是不确定的,一个节点保存N个key,就可以划分出N+1个区间,每个区间都可以衍生一系列的子树。

一个节点中,虽然可以保存N个key,但不是无限制的,达到一定的规模,就会触发节点的分裂,当删除元素达到一定的数目,也会触发节点的合并。

B树(N叉搜索树)

特点:

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

2、进行查询的时候,根据根节点出发,判定当前要查的数据在节点的哪个区间内,再决定下一步往哪走。

3、进行添加和删除元素时,可以涉及到节点的拆分和合并。


B+树

B+树的特点:

1、B+树也是一个N叉搜索树,一个节点上存在N个key,就划分成N个区间。

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

3、父节点上的每个key都会以最大值的身份在子节点的对应区间中存在,叶子节点这一层,包含整个树的数据全集。

4、B+树会使用链表这样的结构,把叶子节点串起来,此时就可以非常方便的完成数据集合的遍历,并且方便的从数据中按照范围取出一个“子集”。

优点:

1、N叉搜索树,树的高度是有限的。

2、非常擅长范围查询

3、所有的查询都是落在叶子节点上,查询之间的开销是稳定的。

4、由于叶子节点是全集,会把数据只存储在叶子节点上,非叶子节点只存储一个用来排序的key,所以非叶子节点用不了多少空间,就可以缓存在内存中,提升访问的速度。


2、事务

事务可以把多个SQL语句打包成一个整体,可以保证这些SQL语句要么全部执行,要么一个都不执行,具有原子性的特点。

事务的执行过程:

开始事务:start transaction;

执行各种SQL语句

主动触发回滚:rollback;

事务结束:commit;

事务的原理:

回滚以日志的方式,记录事务中的关键操作,这样的记录是回滚的依据。然后以打印的方式,将内容放在文件中,即使主机掉电,也不会影响,一旦启动主机,MySQL也会重新启动,发生回滚操作。

事务的特点:

1、原子性:回滚的方式,保证操作都能执行正确。

2、一致性:事务执行前后,数据不能产生特别大的差异。

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

4、隔离性:数据并发执行多个事务时,并发程度越高,整体的效率就越高。


提高并发执行的程度,对提高效率,但也会产生一些问题。

1、脏读问题

一个事务A正在写数据的过程中,另一个事务B读取了同一个数据,接下来事务A修改了数据,导致事务B读到的数据是一个无效数据。

解决方法:

针对写加锁,等写的操作完全执行结束,并且不再修改之后再读,并发性降低了,隔离性提高了,效率降低了,准确性提高了。

2、不可重复读

并发执行事务的过程中,如果事务A多次读取同一个数据,出现不同的情况,就是不可重复读,事务A再读的过程中,事务B修改了数据并提交了数据。

解决方法:

针对读操作进行加锁,读的时候不能再修改数据。

3、幻读

一个事务A执行的过程中,两次读取操作,数据内容没有改变,但是结果集变了,就称为“幻读”。

解决方法:

保持决定的串行执行事务,完全没有并发,效率最低,隔离最高,内容最准确。


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

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

相关文章

Qt 验证自动释放 + 乱码问题(6)

文章目录 验证自动释放(对象树上的对象)乱码问题的缘由解决乱码问题1. 使用QString2. qDebug() 小结 简介:上一篇文章写到,当new出一个控件对象并且将它挂到对象树上,无需我们手动释放该对象,是因为在一个合…

fastjson2 json.tojsonstring 会自动忽略过滤掉 key: null的数据

如果你想在序列化时保留值为 null 的字段,只要打开 Fastjson2 的 WriteNulls 特性即可。常见做法有两种——按调用级别开启,或全局开启。 1. 在每次序列化时加 WriteNulls import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONWriter…

LeetCode热题100--54.螺旋矩阵--中等

1. 题目 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输入:ma…

别卷手柄了!跨平台VR遥操系统实现仿真

我们构建了一个基于 Quest 3 的 VR 遥操系统,该系统能够同时支持 DISCOVERSE 仿真环境与 MMK2 真机的操控,实现了从虚拟环境到真实机器人系统的无缝对接。 • 基于 VR 实现的遥操系统具有良好的扩展性和便携性,为多场景应用提供了灵活的操作方…

Linux复习笔记(一)基础命令和操作

遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。 一、Linux中的基础命令和操作(约30%-40%) 1.用户和组(5%左右) 1.1用户简介(了解) 要求:了解,知道有三个用户…

【C语言干货】野指针

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是野指针?二、野指针的三大成因 1.指针未初始化2.指针越界访问2.指针指向已释放的内存 前言 提示:以下是本篇文章正文内容&…

Unity:Surface Effector 2D(表面效应器 2D)

目录 什么是表面效应器 2D? 🎯 它是做什么的? 🧪 从第一性原理解释它是怎么工作的 📦 重要参数解释 为什么不直接用 Rigidbody(刚体)来控制运动 ? 所以什么时候该用哪个&#…

android 记录应用内存

windows cmd下 30s 记录一次 echo off setlocal enabledelayedexpansion set /a counter0 :loop echo %date% %time% >> meminfo.txt adb shell dumpsys meminfo packagename>> meminfo.txt timeout /t 30 /nobreak >nul set /a counter1 echo counter: !coun…

基于神经网络的 YOLOv8、MobileNet、HigherHRNet 姿态检测比较研究

摘要 随着人工智能技术的飞速发展,基于神经网络的姿态检测技术在计算机视觉领域取得了显著进展。本文旨在深入比较分析当前主流的姿态检测模型,即 YOLOv8、MobileNet 和 HigherHRNet,从模型架构、性能表现、应用场景等多维度展开研究。通过详…

解决HomeAssistant 无法安装 samba share问题

最近家里树莓派上的homeassistant 被折腾崩了,重新安装过程中发现加载项“Official add-ons”里面的“samba share”、“file edit”、“Mosquitto broker”等常用组件都不能安装。报以下错误: [supervisor.docker.interface] Cant install homeassista…

[Linux]从零开始的STM32MP157 Buildroot根文件系统构建

一、前言 在前面的教程中,教了大家如何移植一个LInux的内核并且正确启动,我们发现Linux内核在启动后会出现一个错误,提示我们没有找到根文件系统。那么什么是根文件系统呢?之前我们使用Ubuntu编译了STM32MP157的TF-A,UBOOT,LINUX内…

2025-05-07 学习记录--Python-变量 + 常量 + 命名规则 + 变量的数据类型 + 数据类型

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、变量 ⭐️ 多个变量的赋值 🍭 二、常量 ⭐️ 程序在运行的过程中,值永远不会发生改变的量称之为常量…

16.状态模式:思考与解读

原文地址:状态模式:思考与解读 更多内容请关注:深入思考与解读设计模式 引言 在开发软件系统时,特别是当对象的行为会随着状态的变化而变化时,系统往往会变得复杂。你是否遇到过这样的情况:一个对象的行为在不同的状…

从 Pretrain 到 Fine-tuning:大模型迁移学习的核心原理剖析

引言 在人工智能领域,大模型的出现掀起了一场技术革命。这些拥有海量参数的模型,如 GPT-4、PaLM 等,在众多任务上展现出了惊人的能力。然而,训练一个大模型需要耗费巨大的计算资源和时间,而且直接让大模型处理特定领域…

Java详解LeetCode 热题 100(11):LeetCode 239. 滑动窗口最大值(Sliding Window Maximum)详解

文章目录 1. 题目描述2. 理解题目3. 解法一:暴力法3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 适用场景 4. 解法二:优先队列(最大堆)4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 适用场景 5. 解法三&…

org.apache.poi——将 office的各种类型文件(word等文件类型)转为 pdf

org.apache.poi——将 office的各种类型文件&#xff08;word等文件类型&#xff09;转为 pdf 简介使用方法word转pdf 使用示例word转pdf 简介 使用方法 word转pdf Maven坐标为 <dependency><groupId>com.documents4j</groupId><artifactId>documen…

二叉树与优先级队列

1.树 树是由n个数据构成的非线性结构&#xff0c;它是根朝上&#xff0c;叶朝下。 注意&#xff1a;树形结构之中&#xff0c;子树之间不能连接&#xff0c;不然就不构成树形结构 1.子树之间没有交集 2.除了根节点以外&#xff0c;每一个节点有且只有一个父亲节点 3.一个n个…

如何进行室内VR全景拍摄?

如何进行室内VR全景拍摄&#xff1f; 室内VR全景拍摄作为先进的视觉技术&#xff0c;能够为用户提供沉浸式的空间体验。本文介绍如何进行室内VR全景拍摄&#xff0c;并阐述众趣科技在这一领域的技术支持和服务优势。 室内VR全景拍摄基础 1. 室内VR全景拍摄概述 室内VR全景拍…

如何通过代理 IP 实现异地直播推流

在直播行业日益火爆的今天&#xff0c;许多主播希望突破地域限制&#xff0c;实现异地直播推流&#xff0c;以获得更广泛的观众群体和更好的直播效果。代理 IP 作为一种有效的网络工具&#xff0c;能够帮助主播轻松达成这一目标。本文将详细介绍如何通过代理 IP 实现异地直播推…

随机变量数字特征

主要介绍一维随机变量期望和方差、二维随机变量期望和方差、以及协方差相关公式&#xff0c;及推导。 一维随机变量 以一个抛硬币的场景作为例子&#xff0c;如下&#xff1a; 抛掷两枚均匀硬币&#xff0c;如果两枚都是正面向上&#xff0c;则赢得2元&#xff0c;否则就输掉…