MySQL之索引和事务

news2025/1/22 8:32:58

  • 索引
    • 什么是索引
    • 索引怎么用
    • 索引的原理
  • 事务
    • 使用事务
    • 事务特性
    • 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.coloradmin.cn/o/895302.html

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

相关文章

Nginx 配置文件的完整指南 (一)

文章目录 一、简介1.1 配置文件一览 二、全局配置2.0 user2.1 worker_processes2.2 events模块2.3 http模块 三、server模块3.1 listen3.2 server_name3.3 location:请求处理位置 Nginx 配置文件的完整指南 (二) 一、简介 Nginx是一款高性能的Web服务器和反向代理服…

数字孪生三维可视化系统开发平台有哪些优点

随着企业数字化发展的深入,迅速增多的场景化需求要求企业具备更加灵活、敏捷、易用的应用开发能力。而高效、便捷、易用、低本的数字孪生系统制作也是大势所趋,数字孪生公司深圳华锐视点基于3d可视化、数字孪生和VR虚拟仿真技术搭建了3D数字孪生编辑器&a…

【Axure高保真原型】JS日期选择器筛选中继器表格

今天和大家分享JS日期选择器筛选中继器表格的原型模板,通过调用浏览器的日期选择器,所以可以获取真实的日历效果,具体包括哪一年二月份有29天,几号对应星期几,都是真实的,获取日期值后,通过交互…

python 使用 pdf2image 库将PDF转换为图片

在 Ubuntu 上实现网络穿透:手把手教你搭建FRPS服务器 初环境步骤一:安装pdf2image库步骤二:导入必要的库步骤三:指定PDF文件路径步骤四:将PDF转换为图片步骤五:保存图像为图片文件完整代码运行结果 在数字化…

Linux内核常用调试技巧汇总

printk printk共有8个等级,从0-7,等级依次降低。 打印等级可以通过修改/proc/sys/kernel/printk来改变。 查看printk等级: cat /proc/sys/kernel/printk 7 4 1 7打开内核所有打印: echo 8 > /proc/sys/kernel/printk 动态…

VK36W1D浴缸,洁具高灵敏度电容式单点液体水位检测触摸芯片资料介绍

产品品牌:永嘉微电/VINKA 产品型号:VK36W1D 封装形式:SOT23-6L 产品年份:新年份 (C21-163) 产品特点:VK36W1D具有1个触摸检测通道,可用来检测水从无到有和水从有到无的动作。该…

神经网络论文研读-多模态方向-综述研读(上)

翻译以机翻为主 原文目录 前言 图1:LMU印章(左)风格转移到梵高的向日葵绘画(中)并与提示混合 - 梵高,向日葵 -通过CLIPVGAN(右)。在过去的几年中,自然语言处理&#xff…

【MySQL系列】表内容的基本操作(增删查改)

「前言」文章内容大致是对MySQL表内容的基本操作,即增删查改。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表内容的增删查改1.1 Create1.1.1 单行数据全列插入1.1.2 多行数据指定列插入1.1.3 插入否则更新1.1.4 数据替换 1.2 Ret…

Vue 2自定义指令入门

Vue 2自定义指令入门 Vue自定义指令允许我们在DOM元素上添加自己想要的行为来扩展Vue的功能。 一个自定义指令需要一个名称和一个定义对象。在定义对象中,你可以使用一些钩子函数来控制指令的行为: bind:在指令被绑定到元素上时使用&#…

ShardingSphere 可观测 SQL 指标监控

ShardingSphere并不负责如何采集、存储以及展示应用性能监控的相关数据,而是将SQL解析与SQL执行这两块数据分片的最核心的相关信息发送至应用性能监控系统,并交由其处理。 换句话说,ShardingSphere仅负责产生具有价值的数据,并通过…

类加载 - 双亲委派机制详解

1、类加载器有哪些 启动类加载器(Bootstrap Class Loader):它是Java虚拟机的一部分,负责加载Java核心类库,如java.lang包中的类。它是最顶层的类加载器,由C实现,不是Java类。 扩展类加载器&…

效率逆天GPT-4一天顶6个月,颠覆审核行业

内容审核一直被视为互联网大厂中的脏活和累活。就拿审文章来说,审核员们一天要审约2000篇文章,724h工作制,经常过着昼夜颠倒的日子,更要命的是,他们每天都要接收各种低俗污秽内容,久而久之,心理…

4.物联网LWIP之C/S编程

LWIP配置 服务器端实现 客户端实现 错误分析 一。LWIP配置(FREERTOS配置,ETH配置,LWIP配置) 1.FREERTOS配置 为什么要修改定时源为Tim1?不用systick? 原因:HAL库与FREERTOS都需要使用systi…

MQTT协议--技术文档--搭建mqtt服务器--《EMQX单体服务器部署》

产品概览 | EMQX 5.1 文档 什么是EMQX? EMQX 是一款开源 (opens new window)的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理…

前端开发工具及环境配置

1.前端开发环境node npm环境配置 第一步:打开Download | Node.js (nodejs.org)下载,解压。 找到下载压缩包进行解压 解压到D盘目录下: 第二步:配置环境变量:右击此电脑点击属性进入高级系统设置 点击高级系统设置进入…

泛微E8配置自定义触发流程失败

在新公司接了个配置泛微流程触发的活。因为泛微的官方文档并没有详细的操作指引,在测试环境配置之后、要触发的流程可以手工提交,但是触发一直不成功。简单记录下业务场景和其他处理信息,以供参考。 应用版本 目前使用了泛微 E8 &#xff0…

无涯教程-Perl - warn函数

描述 此函数将LIST的值打印到STDERR。基本上与die函数相同,除了不对出口进行任何调用并且在eval语句内不引发异常。这对于引发错误而不导致脚本过早终止很有用。 如果变量$包含一个值(来自先前的eval调用),并且LIST为空,则$的值将以。\t.caught打印。附加到末尾。如果$和LIST…

GPT-4一纸重洗:从97.6%降至2.4%的巨大挑战

斯坦福大学和加州大学伯克利分校合作进行的一项 “How Is ChatGPTs Behavior Changing Over Time?” 研究表明,随着时间的推移,GPT-4 的响应能力非但没有提高,反而随着语言模型的进一步更新而变得更糟糕。 研究小组评估了 2023 年 3 月和 20…

为AI而生的数据库:Milvus详解及实战

1 向量数据库 1.1 向量数据库的由来 在当今数字化时代,人工智能AI正迅速改变着我们的生活和工作方式。从智能助手到自动驾驶汽车,AI正在成为各行各业的创新引擎。然而,这种AI的崛起也带来了一个关键的挑战:如何有效地处理和分析…