MySQL之索引和事务

  • 索引
    • 什么是索引
    • 索引怎么用
    • 索引的原理
  • 事务
    • 使用事务
    • 事务特性
    • MySQL隔离级别

索引

什么是索引

索引包含数据表所有记录的引用指针;你可以对某一列或者多列创建索引和指定不同的类型(唯一索引、主键索引、普通索引等不同类型;他们底层实现也是不同的)
作用:表、索引、数据如同书本、目录、内容;能提高数据库性能、快速帮我们定位要看的位置
注意:索引会提高查询效率;但是增删改开销会变大;因为都需要再改变多一个索引;但是增删改通过是频率没那么高的
索引也不一定就能大大提高速度的;如果针对性别这种重复非常多的列加索引;意义就没那么大了

索引怎么用

查看:show index from 表名;
创建:create index 索引名 on 表名(字段名);
另外:
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。加了索引就会去相应的列去查询;而没加则会一条一条去遍历;效率将会降低很多。(跟我们电脑文件搜索功能和everything一样;提示把文件信息存好在数据库;这样子查就不必真的去查这些这么大的文件)
删除索引:drop index 索引名 on 表名;
注意:创建和删除这两个操作最后是在建表的约定清楚;因为后面再来创建和删除这估计很危险;要吃很多资源
使用索引:我们只需要创建完了进行;数据库会自动通过搜索引擎评估哪种方案性价比最好;评估是否走索引;如果要走的话怎么走

索引的原理

1:哈希表?只能比较相等;没法范围查询;不行
2:二叉搜索树?查询元素时间复杂度;单边树跟链表一样O(n);能范围查询;但是元素多;树的高度就会比较高;比较的次数就会比较多。
3:N叉搜索树;分叉多;树的高度就降低了。每个节点有多个值,同时有多个分叉,树的高度降低了,比较次数虽然没有减少,但是在硬盘上读的次数减少了。因为每一个节点都是在硬盘上的(就好比你一次丢5袋垃圾肯定比丢5次一袋垃圾快);可能会出现在根节点、不深的位置查的比较快;查询速度不均衡。
4:B+树;N叉搜索树已经很合适但是还不够;需要进一步补充。量身定做;最大值要重复出现
在这里插入图片描述
这也是N插搜索树;每个节点包含N个key,N个key划分N个区间;最后一个Key是最大值;例如上面:11比8大就放15的左边;最右边永远最大。
父元素的Key会反复在子元素以最大值出现;最终在叶子节点包含所有数据全集;最后用类似链表方式连接
在这里插入图片描述
1:高度下降IO操作就少了、
2:范围查询更香;
3:所有的查询都落在叶子节点上;无论查哪个元素中间;中间的比较次数都不多
4:所有的Key都在叶子节点上体现;使用非叶子节点不必存表的数据行;把所有的数据行放到叶子节点上即可;非叶子节点只需要存索引列的值

如果多索引:
比如主键索引是id,非主键索引的姓名。
那么姓名索引的B+树的叶子节点存储的都是主键id,找到id后,再去主键索引idB+树去遍历,主键idB+树的叶子节点存储的是完整数据行

它的实现会帮我们构建好这颗树;然后我们要输入的数据就会走这颗树去查询
B+树只是在MySQL的InnDB这个数据库储存引擎所使用的典型数据结构。不同的数据库有不同的储存引擎,索引的数据结构也会有所差异。(储存引擎;实现数据库具体如何在硬盘上组织数据)

事务

事务初衷:把有些操作不能分割的打包成一个整体(原子性)。比如:转账分两部分;用户A钱 - -;用户B钱++。如果中间出现问题;导致的结果但是致命的;可能没转成功就扣钱了。
回滚事务:上述如果中间出现问题;就自动恢复执行之前的样子;让你看起来没执行的样子(就像你走5步回到原点;和你在原点一直没有动的区别)

使用事务

Start transaction;//开启事务;开启后这些sql代码先攒着;等commit再一起执行;保证原子性
sql;
sql
sql;
commit;//提交事务
//出现问题就rollback;回滚事务

事务特性

1:原子性
2:一致性;事务完成时或者失败,必须所有的事务都保持一致状态。(比如转账要么全部成功;要么全部失败回滚到最初;保持一致。双方总额是2000;转账成功或者失败总额都是2000;不能是转着成功就变2500;失败就变2000)
3:持久性;事务产生的修改会写入硬盘。(先把要执行的过程记录到硬盘;然后再真正的去执行;根据这个如果断电下次重连就知道上次执行到哪;然后进行回滚)
4:隔离性;一个数据库服务器;同时执行多个事务的时候;事务之间相互影响程度(一个服务器有多个客户端;可能并发出现线程安全问题;尤其是操作同一个表的时候)

MySQL隔离级别

隔离性越高;并发程度越低;效率是慢了点;但是准确度高。(反之则反之)
MySQL隔离级别就为我们提供不同档位的并发程度;有些场景我们可能需要准(算钱);有些场景我们可能需要快

脏读:我在进行修改博客的时候;然后另一个人在读;但是我改到一半发现我写错了;不行我得擦掉重写。而恰好我写错的部分就被那个人读走了(加锁:我在写的时候不给你读)
解决:降低并发性;提高隔离性(给写操作加锁)

不可重复读:根据脏读的要求;我写的时候不给另一个人看。ok;我写完了;另一个人现在开始读了一半;然后我发现有问题这个例子举的不好;我得重新修改一下;我把我博客改了重新发布。这就导致另一个人刚刚读到牛一天吃100斤草;再往下读;怎么变成马这样吃能一天跑千里呢?
解决:给读操作也加锁;读的时候;我不能改

幻读:根据上述两个要求;我又整活了。你读你的;不给我改是吧;我就是闲不下来;我要学习;我又写一篇新文章;或者觉得有篇不好我删掉重写;结果是他读当前的文件内容没问题;但是他看到的文件个数改变了。同一个事务;两次读到的结果集不同。
解决:舍弃并发;别卷了;他在读的时候你就休息一下;该休息就得好好休息;才能更好的学习

四个隔离级别:在这里插入图片描述
默认挡位是第三个;我们可以根据具体要解决需求场景;在MySQL配置文件决定使用哪个隔离级别

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

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

相关文章

FastDFS与Nginx结合搭建文件服务器,并实现公网访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

openpnp - 板子上最小物料封装尺寸的选择

文章目录 openpnp - 板子上最小物料封装尺寸的选择概述END openpnp - 板子上最小物料封装尺寸的选择 概述 现在设备调试完了, 用散料飞达载入物料试了一下. 0402以上贴的贴别准, 贴片流程也稳, 基本不需要手工干预. 0201可以贴, 但是由于底部相机元件视觉识别成功率不是很高…

uni-app打包后安卓不显示地图及相关操作详解

新公司最近用uni-app写app,之前的代码有很多问题,正好趁着改bug的时间学习下uni-app。 问题现象: 使用uni-app在浏览器调试的时候,地图是展示的,但是打包完成后,在app端是空白的。咱第一次写app&#xff…

docker 06(docker compose)

一、服务编排 二、docker compose

查看所有数据库各表容量大小

查看所有数据库各表容量大小 1. 查看所有数据库各表容量大小2.查看指定数据库容量大小3. 查看所有数据库容量大小 1. 查看所有数据库各表容量大小 select table_schema as 数据库, table_name as 表名, table_rows as 记录数, truncate(data_length/1024/1024, 2) as 数据容量…

Mac常见恶意软件再现,办公应用程序潜藏风险如何防范?

Mac电脑正受到臭名昭著的XLoader恶意软件的新变种的攻击,该恶意软件已被重写为在最好的MacBook上本地运行。 虽然XLoader至少从2015年开始出现,但在2021年发现macOS变体之前,它主要用于针对Windows PC。然而,该版本是作为Java程序…

解决Fastjson2 oom(Out Of Memory),支持大对象(LargeObject 1G)json操作

在使用Fastjson中的 JSON.toJSONString时,如果对象数据太大(>64M)会出现Out Of Memory,查看源码发现为JSONWriter中的判断代码 其中maxArraySize默认最大为64M,如果超过了就会抛出oom错误 如果fastjson过多的使用内存,也可能导致java堆内存溢出,所以这…

〔015〕Stable Diffusion 之 模型管理和信息管理插件 篇

✨ 目录 🎈 模型管理🎈 添加预览图🎈 添加详细描述🎈 模型分组🎈 下载 Civitai Helper 插件🎈 插件 Civitai Helper 使用方法 🎈 模型管理 点击生成按钮下的 显示/隐藏扩展模型 Show/hide extr…

chromedriver.exe 的所有版本下载地址

Chrome for Testing availability 上面的网址是V115 v116.... 以上的。 CNPM Binaries Mirror 上面这个是V115版本以下的。 这个文章没有任何实际价值,记录的原因是因为突然发现过去的py无法运行,原因是chrome浏览器偷偷升级到V115,于是找…

机器学习|决策树:数学原理及代码解析

机器学习|决策树:数学原理及代码解析 决策树是一种常用的监督学习算法,适用于解决分类和回归问题。在本文中,我们将深入探讨决策树的数学原理,并提供 Python 示例代码帮助读者更好地理解和实现该算法。 决策树数学原…

C++笔记之全局函数做友元与类做友元

C笔记之全局函数做友元与类做友元 code review! 文章目录 C笔记之全局函数做友元与类做友元1.全局函数做友元2.类作友元 1.全局函数做友元 代码 #include <iostream> using namespace std;class MyClass { private:int x; public:MyClass(int a) : x(a) {}friend void…

初识Node.js

什么是node.js? node.js是一个基于chrome V8引擎的javascript运行环境 浏览器是js前端的运行环境 node是js后端的运行环境 什么是终端&#xff1f; 用于实现人机交互的方式 Windows系统有两种打开终端的方式 1.windowsR输入cmd&#xff08;旧版&#xff09; 2.在文件所处…

Python+request+unittest实现接口测试框架集成实例

这篇文章主要介绍了Pythonrequestunittest实现接口测试框架集成实例&#xff0c;小编觉得挺不错的&#xff0c;现在分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来看看吧 1、为什么要写代码实现接口自动化 大家知道很多接口测试工具可以实现对接口的测试&#xf…

数据结构与算法:计算机科学的基石

文章目录 数据结构&#xff1a;构建数据的框架算法&#xff1a;问题的解决方案编程语言&#xff1a;实现数据结构的工具结论 &#x1f389;欢迎来到数据结构学习专栏~数据结构与算法&#xff1a;计算机科学的基石 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&…

Spring的生命周期及Spring Bean单例和多例---超详细教学

一&#xff0c;何为spring生命周期 一个Bean对象从被Spring容器创建到被销毁的整个过程。Spring框架对Bean对象的生命周期进行了管理&#xff0c;提供了灵活性和控制权&#xff0c;让开发人员能够在不同的阶段进行自定义操作 1.1生命周期图 1.2.为什么要学习对象的生命周期…

微人事 部门管理 模块 (十五)

部门管理的树展示和搜索 数据展示页是个树&#xff0c;我们一次性把数据加载出来也可以通过点一次id加载查询出来出来子部门&#xff0c;我们用一次拿到说有json数据加载出来 数据不多可以用递归&#xff0c;数据很多就用懒加载的方式 由于子部门比较深就不适合&#xff0c;权…

不负众望~历时4年修炼,这本册子终于成书了(文末赠书)

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 精进Spring Boot首选读物 “小册”变“大书”&#xff0c;彻底弄懂Spring Boot 全方位配套资源…

【BASH】回顾与知识点梳理(三十六)

【BASH】回顾与知识点梳理 三十六 三十六. 认识与分析登录档36.1 什么是登录档CentOS 7 登录档简易说明登录档的重要性Linux 常见的登录档档名登录档所需相关服务 (daemon) 与程序CentOS 7.x 使用 systemd 提供的 journalctl 日志管理 登录档内容的一般格式 36.2 rsyslog.servi…

QPushbutton

QPushbutton API使用方式 QPushbutton大部分时候都需要使用它从父类QAbstractbutton中继承过来的那些 API。 API // 构造函数 /* 参数:- icon: 按钮上显示的图标- text: 按钮上显示的标题- parent: 按钮的父对象, 可以不指定 */ QPushButton::QPushButton(const QIcon &i…

基于STM32+FreeRTOS的四轴机械臂

目录 代码&#xff1a; 注释写的较少&#xff0c;但本文出现的代码都有注释&#xff0c;所以请直接在本文里看注释 项目概述&#xff1a; 一 准备阶段&#xff08;都是些废话&#xff09; 二 裸机测试功能 1.摇杆控制 接线&#xff1a; CubeMX配置&#xff1a; 代码 2…