MySQL索引和事务

索引和事务

  • 1. 索引
    • 1.1 概念
    • 1.2 作用
    • 1.3 使用
    • 1.4 索引的存储方式
  • 2. 事务
    • 2.1 概念
    • 2.2 使用
    • 2.3 事务的基本特性
    • 2.4 事务的隔离级别

1. 索引

1.1 概念

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

1.2 作用

  1. 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系.
  2. 索引所起的作用类似书籍目录,可用于快速定位、检索数据.
  3. 索引对于提高数据库的性能有很大的帮助

但是索引会消耗空间,所以适用于查询较多的程序中,反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引.

1.3 使用

当我们创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建
对应列的索引。例如 :
在这里插入图片描述

但是其他情况下就需要手动创建索引.
语法:

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

例如 :
在这里插入图片描述
删除的语法类似

drop index 索引名 on 表名;

在这里插入图片描述
注意 : 只能删除手动创建的索引, 删除自动创建的索引会报错.
在这里插入图片描述

1.4 索引的存储方式

索引保存的数据结构主要为B+树,这是在B 树的基础上专门为数据库设计的一种数据结构,其结构和二叉搜索树类似但是B+树的每个节点都可以存储多个数据.
在这里插入图片描述
B+树的特点:

  1. B+树也是N叉搜索树,但是N个key分出了N个区间,其节点上最后一个key就是最大值了.
  2. 父节点的key会在子节点中出现,并且是最大值,这样叶子节点就可以包含这个数据集.
  3. 把叶子节点按照链表的方式首尾相连,此时就可以通过叶子节点之间的这个连接快速的找到"下一个", “上一个” 元素, 进一步方便了"范围查询".

B+树的优势

  1. 适用于范围查询.
  2. 所有的查询操作,都会执行到叶子节点,所以比较次数是均衡的, 查询时间比较稳定.
  3. 由于叶子节点上是完整的数据集, 所以表的每一行数据的其他列都可以保存到叶子节点上, 所以非叶子节点只存储构建索引的key就可以了.因此非叶子节点占用的存储空间比较小, 可以在内存中缓存一份,进行数据查询的时候就可以通过内存直接比较减少了硬盘io次数,提高了效率.

2. 事务

2.1 概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

2.2 使用

  1. 开启事务:start transaction;
  2. 执行多条SQL语句
  3. 回滚或提交:rollback/commit;

2.3 事务的基本特性

  1. 原子性: 保证多个操作被打包成一个整体, 要么全部执行正确, 要么一个不执行.
  2. 一致性: 事务执行之前和事务执行之后, 数据能对上.
  3. 持久性: 事务执行的各种操作都是持久生效的(写入到硬盘上).
  4. 隔离性: 并发执行事务的时候隔离性会在执行效率和数据可靠之间做出权衡.
    "隔离"描述的是同时执行的事务之间, 相互影响
    隔离性越高并发性越低数据越可靠性能越低.

2.4 事务的隔离级别

在并发执行的事务过程中,可能产生以下问题:

  1. 脏读: 读到了写事务提交前的中间数据(脏数据).
  2. 不可重复读: 一个事务内, 多次读取同一个事务发现数据不一样.
  3. 一个事务之内,多次读取到的数据值相同,但是结果集不同,

针对以上可能发生的问题MySQL提供了四种事务的隔离级别

  1. read uncommitted 允许读未提交的数据.(隔离性低, 并发性高,数据可靠性低,效率高)
  2. read committed 允许读已经提交的数据.(给写加锁,解决了脏读).
  3. repeatable read 可重复读取数据(给写和读都加锁,解决了脏读和不能重复读)
  4. serializable 事务彻底串行执行, 解决了以上问题但是效率大大降低
    尽管MySQL提供了这四种隔离级别,但是大部分情况下使用默认的就可以

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

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

相关文章

Vue通过微软官方链接预览pptx docx xlsx

目录: 一、实现步骤 二、实现效果 代码真实可用! 一、实现步骤: 1、使用的是vue和elementUI, 假设有这些变量:attachment是附件的意思 data() {return {previewDialog: false,attachmentSrc: ,attachmentList: [{name:…

【无标题】visual studio2019+Qt5.15.2+PCL1.12.1+vtk9.1.0+cmake3.22.2

安装VS------安装Qt-------安装PCL------安装cmake-----安装VTK-----环境配置 安装用了两天时间 1环境搭建 1.1 Visual Studio 2019 (PCL所需版本) https://my.visualstudio.com/Downloads?qvisual%20studio%202019&wt.mc_idomsftvscom~older-downloads 1.2 Qt安装 …

远程访问本地jupyter notebook服务 - 无公网IP端口映射

文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如…

所有语言数据类型大汇总(持续更新)

一 c语言 参考 C语言-整数:short、int、long、long long(signed和unsigned)、原码、反码、补码_c语言signed是什么类型_Talent Q的博客-CSDN博客https://blog.csdn.net/qq_43177371/article/details/105703234 二 system verilog

rust

文章目录 rustCargoCreating a rust project How to Debug Rust Programs using VSCodebasic debuggingHow to pass arguments in Rust debugging with VS Code. References rust Cargo Cargo is a package management tool used for downloading, compiling, updating, and …

Waves 14 Complete对Mac和Windows系统的最低要求

Waves 14 Complete是一款功能齐全的音频编辑软件,适用于音乐制作、音频工程和声音设计等领域。它提供了一系列强大的工具和效果,帮助用户在音频处理过程中实现专业水平的效果和混音。 Waves 14 Complete包含了多个实用的插件,如均衡器、压缩…

设计模式-建造者模式

盖房项目需求: 需要建房子:这一过程为打桩、砌墙、封顶。房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的。 请编写程序,完成需求。 一、传统…

复习单例模式

单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个…

了解 JVM - 认识垃圾回收机制与类加载过程

前言 本篇通过介绍JVM是什么,认识JVM的内存区域的划分,了解类加载过程,JVM中垃圾回收机制,从中了解到垃圾回收机制中如何找到存活对象的方式,引用计数与可达性分析的方式,再释放垃圾对象时使用的方式&…

最小二乘拟合平面——拉格朗日乘子法

目录 一、算法原理二、代码实现1、python2、matlab 三、算法效果 一、算法原理 设拟合出的平面方程为: a x b y c z d 0 (1) axbyczd0\tag{1} axbyczd0(1) 约束条件为: a 2 b 2 c 2 1 (2) a^2b^2c^21\tag{2} a2b2c21(2)   可以得到平面参数 a…

【Django学习】(十四)自定义action_router

之前我们的视图类可以继承GenericViewSet或者ModelViewSet,我们不用再自定义通用的action方法,但是有时候我们需要自定义action,我们该如何设计呢? 自定义action 1、手写视图逻辑 1.1、先在视图集里自定义action方法&#xff0…

4、深入理解ribbon

一、负载均衡的两种方式 服务器端负载均衡 传统的方式前端发送请求会到我们的的nginx上去,nginx作为反向代理,然后路由给后端的服务器,由于负载均衡算法是nginx提供的,而nginx是部署到服务器端的,所以这种方式又被称为…