MySQL数据库索引和事务详解

article/2025/11/3 11:24:39

目录

前言:

索引

查看索引

创建索引

删除索引

索引使用

底层数据结构分析

事务

事务引出

MySQL设计事务

事务四大特性

小结:


前言:

    数据库索引和事务的存在,对于数据库的一些性能有了显著提升。我们需掌握其底层的实现原理。

索引

查看索引

    语法:show index from 表名;

show index from student;

    注意:可以清楚看见id这一列是由primary key约束的,具有索引。

创建索引

    语法:create index 索引名称 on 表名(列名);

create index idx_student_name on student(name);

注意:

    索引已经创建成功,name这列已经具有索引。一个表只能有一个主键,但是可以有多个索引。

    创建索引最好在创建表最初时就创建成功。如果一张表有大量数据,创建索引是极其危险的行为。需要读取服务器硬盘数据,会消耗大量的磁盘IO。这段时间里数据库可能无法正常使用。

删除索引

   语法:drop index 索引名称 on 表名;

drop index idx_student_name on student;

    注意:name这列索引已经删除成功。同样的删除索引也需要读取硬盘数据,也是危险行为。

索引使用

    索引创建成功后,不需要手动使用,在执行查询语句时会分析具体使用还是不使用索引。SQL是通过数据库执行引擎来执行的,它会自动评估这次查询使用还是不使用索引,并且会对SQL进行一些优化操作。选择成本低,速度快的方案。那么一次查询是否在走索引,以及怎么走,我们是不好分析的。可以通过explain关键字,具体查询索引的使用情况。

底层数据结构分析

    如果使用哈希表作为底层数据结构。由于数据库中经常进行范围查询,而哈希表只能进行是否相等的查询,那么哈希表显然就不适合。如果使用二叉搜索树来作为底层数据结构,由于数据量特别大时,树的高度就会比较高,而树的高度决定了查找的次数。服务器中的查询需要读取硬盘数据,这样会增加IO的压力,也是不合适的。

    如果使用N叉搜索树(B树)作为底层数据结构。它每个节点上有多个值,同时有多个分叉。这样树的高度就会降低,但随之带来的是不稳定的查询。

    这样的结构可以降低树的高度。一个节点上有多个数据,可以减少读取硬盘的次数(一次可读多个数据)。由于数据的实体都是在节点上存储,即可能一次就查找到目标数据,也可能多次查找到目标数据,带来的是不稳定的查询。在B树的基础上提出了B+树。

    B+树作为MySQL的InnoDB数据库引擎里典型的数据结构。不同的数据库,不同的引擎,底层的数据结构可能会不一致。

    B+树的叶子节点是用链表连接起来的。由于子节点包含父节点的数据,并且是以最大值出现的。即在叶子节点就会包含所有数据的全集合。

结构特点:

   1)可以使树的高度降低下来。

   2)一次可对读多条数据,减少对硬盘的读取次数,降低硬盘IO压力。

   3)数据的全集和是用链表连接起来,更加适合范围查询。

   4)由于叶子节点包含数据的全集和,可将实体数据存入叶子节点,非叶子节点存储索引即可。

   5)所有查询都是落入叶子节点,无论查询那个数据,中间比较次数都差不多,查询比较稳定。

注意:

    一个表可能有多个索引。非主键有索引,也会构造一个B+树。非叶子节点存储索引,叶子节点存储主键id。

    如果使用主键查询,只需要查一次B+树即可。如果使用非主键的索引查询,需要遍历一次非主键的B+树,找到对应的主键id,再去查主键的B+树。这样的操作称为回表。

事务

事务引出

    由于一些操作是一个整体。例如转账操作,需要从一个户主账户里扣钱,另一个户主账户里要增加钱。两步操作要么都进行,要么都不进行。

    MySQL中为了保证这样的想法,就将这两个操作称为一个事务。事务是不可以分割的,体现出事务的原子性。如果事务执行一半出错了,MySQL中会记录目前正在进行事务的操作,一旦发生错误就会进行恢复操作。保证和之前执行的样子一致。称为回滚操作(rollback),也是事务一致性的体现。

MySQL设计事务

    start transaction;//开启事务

       中间写多个SQL

    commit;//提交事务

    注意:中间的SQL不会立即执行,等到commit统一执行(保证原子性)。可以使用rollback主动进行回滚,恢复之前的状态。

事务四大特性

1)原子性

    一个事务是一个整体,不可以分割。

2)一致性

    事务执行的前后,数据都是合法状态。

3)持久性

    数据库操作都是针对于硬盘,产生的效果就具有持久性。

4)隔离性

    首先介绍一个例子。我在写数据的时候,如果旁边有人看,他可能读一个错误的数据,因为我可能会改,称为脏读问题。如果我写完他在看,会解决脏读问题,但我可能会更新我写的东西,造成他前后读的数据不一样,称为不可重复读问题。如果我写完他再看,并且他在看的时候我不能更新,可以解决脏读和不可重复读问题,但我可以写其他的数据,造成他读数据的集合不一样,称为幻读问题。

    其实这个过程我在逐渐减小读和写的并发程度。并发越低,隔离性就越高,执行效率越低,数据准确度越高。并发越高,隔离性就越低,执行效率就越高,数据准确度越低。

MySQL提供了四个隔离级别

1)read uncommitted 

    不做任何限制,并发程度最高,隔离性最低,执行效率最高,数据最没有准确度。会造成脏读,不可重复的,幻读问题。

2)read committed

    对写操作加锁,降低并发程度,隔离性增加,执行效率降低,数据准确度增加。解决脏读问题。

3)repeatable read

    对读和写都加锁,又进一步降低并发程度,隔离性又进一步增加,执行效率又降低,数据准确度又进一步增加。解决脏读,不可重复读问题。

4)serializable

    严格串行化,并发程度最低,隔离性最高,执行效率最低,数据准确度最高。解决脏读,不可重复读,幻读问题。

小结:

    在学习过程中,要多思考底层的原理,对于我们理解会有很大帮助,也会加深印象。坚持就会有不一样的收获。


http://chatgpt.dhexx.cn/article/7Vtu6B7M.shtml

相关文章

MySql数据库索引原理

本文主要是阐述mysql索引机制,主要是说明存储引擎Innodb 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。 第二部分结合MySQL数据库中InnoDB数据存储引擎中索引的架构实现讨论聚集索引、非聚集索引及覆盖索引等话题。 第三部分讨论MySQL中高性…

数据库(mysql)之索引

目录 一、索引概念 2、索引优点和缺点 1、优点 2、缺点 3、创建索引的原则依据 二、索引的分类和创建 1、普通索引(标志MUL) 1、直接创建索引 2、修改表结构的方式创建索引 3、创建表的时候指定索引 2、唯一索引(标志NUI&#x…

【MySQL数据库】----MySQL的索引

目录 1.初识MySQL索引 2.索引的劣势 3.和索引相关的一些sql 4.索引背后的数据结构 4.1HashTable 4.2.顺序表和链表 4.3.二叉搜索树 4.4.AVL树 5.B树 5.1B树的优势和劣势 6.B树(升级版B树) 7.量身定做 B 树 8.总结 9.参考博文 1.​​​​​…

数据库(mysql)索引

目录 一、索引概念 2、索引优点和缺点 1、优点 2、缺点 3、创建索引的原则依据 二、索引的分类和创建 1、普通索引(标志MUL) 1、直接创建索引 2、修改表结构的方式创建索引 3、创建表的时候指定索引 2、唯一索引(标志NUI&#x…

MySql 数据库【索引】

MySql 数据库【索引】 1. 什么是索引?2. 索引的实现原理?3. 添加索引的条件?4. 索引的操作1. 创建索引2. 删除索引3. 查看一个sql语句是否使用了索引进行检索 5. 索引的失效6. 索引的类型 1. 什么是索引? 索引是在数据库表的字段…

【MySQL数据库】MySQL索引

MySQL索引、事务与存储引擎 一、索引1.1索引的概念1.2索引的作用1.3索引的工作原理1.4索引的副作用1.5索引的应用场景 二、索引的创建与分类2.1普通索引,最基本的索引类型,没有唯一性之类的限制。2.2唯一索引2.3 主键索引2.4组合索引2.5全文索引 三、删除…

MySQL数据库索引机制

文章目录 一、MySQL缓冲区二、MySQL的page1.认识单个page2.认识多个页3.聚簇索引和非聚簇索引 三、索引的操作1.创建主键索引2.创建唯一索引3.创建普通索引4.查询索引的方法5.删除索引的方法6.索引创建原则 一、MySQL缓冲区 MySQL是一款有客户端和服务端的网络应用&#xff0c…

MySQL数据库索引教程(超详细)

索引初步 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 …

【MySql】数据库索引

数据库索引 索引索引的创建索引的查看索引的删除 聚簇索引 & 非聚簇索引聚簇索引非聚簇索引 索引创建原则 索引 可以简单理解为一本书的目录信息,是为了提升查找效率而建立的 索引的创建 1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查…

MySQL 数据库--索引

目录 前言 一、索引及分类 1.索引的概念 2.索引的作用 3.索引的副作用 4.索引的分类 4.1 普通索引 4.2 唯一性索引 4.3 主键索引 4.4 全文索引 4.5 组合索引(单列索引与多列索引) 5.创建索引的原则依据 二、创建及查看索引 1.准备 2.创建索…

MYSQL数据库-索引

MYSQL数据库-索引 零、前言一、索引概念二、认识磁盘三、理解索引1、如何理解Page2、B vs B3、聚簇索引 VS 非聚簇索引4、普通索引5、总结 四、索引操作1、创建索引2、查询索引3、删除索引 零、前言 本章主要讲解MYSQL数据库中的索引这一重要知识点 一、索引概念 索引的价值&a…

MySQL数据库:索引

一、索引简介 1.概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 相当于是给数据库中的数据建立了一个目录,通过目录可以知道…

MySQL数据库的索引

文章目录 一、索引是什么?索引的作用 二、索引的使用查看索引创建索引删除索引 三、索引的底层 一、索引是什么? 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型&a…

Mysql数据库索引详解

一、前言 随着我们业务量不断的增大,会发现查询数据库的时间变的越来越长,其实就是数据库到达了性能的瓶颈,这时候需要我们对其进行优化操作,可能我们第一时间就会想到:加索引。没错,这是优化的一个方向&a…

MySQL 数据库--索引(理论详解及实例演示)

文章目录 前言一、索引及分类1.索引的概念2.索引的作用3.索引的副作用4.索引的分类4.1 普通索引4.2 唯一性索引4.3 主键索引4.4 全文索引4.5 组合索引(单列索引与多列索引) 5.创建索引的原则依据 二、创建及查看索引1.准备2.创建索引的方法2.1 创建普通索…

数据库-mysql之索引

目录 1、索引简介 1.1 索引的含义和特点 1.2 索引的分类 1、普通索引 2、唯一性索引 3、全文索引 4、单列索引 5、多列索引 6、空间索引 1.3 索引的设计原则 1.选择唯一性索引 2.为经常需要排序、分组和联合操作的字段建立索引 3&#xff0…

web前端页面开发工具的演进史

小编是一位有着6年前端开发经验的web前端开发工程师&#xff0c;今天小编从个人的视角来聊一聊web前端开发工具的演进史。 小编第一次接触 web前端开发是在2011年&#xff0c;那会还在上高中。当时正是大家都每天忙碌着装扮自己的QQ空间。那时的web前端布局还是以 <table&g…

关于Webpack前端工程化构建,你必须要掌握这些核心知识点

引言 在很久之前&#xff0c;模块化管理还没有出现&#xff0c;如果我们开发一个页面想要引入一些依赖的话&#xff0c;最常见的做法就是将依赖文件引入到.html文件中。比如&#xff0c;我们要使用JS的一些依赖库&#xff0c;就要在.html文件中使用<script>标签引用&…

构建工具 Vite、Webpack、Rollup对比

Webpack介绍 热更新方面&#xff1a;webpack支持HMR&#xff0c;但是webpack需要全部重新编译并更新&#xff0c;效率较低tree-shaking&#xff1a;webpack2开始支持且消除效果不好&#xff0c;但是webpack5有更好的tree-shaking&#xff08;去除未使用代码&#xff09;分包方…

前端三大构建工具 Webpack、Vite、Rollup 优劣势及原理分析

在刚刚结束的 VueConf2021 中&#xff0c;除了 Vue 3.0 以外&#xff0c;另外一个亮点就是下一代构建工具 Vite 了。 在尤雨溪分享的【 Vue 3 生态进展和计划】的演讲中&#xff0c;尤大神还特意提到 Vite 将成为 Vue 的现代标配。甚至最近新推出的 Petite Vue 从开发、编译、发…