[04]MySQL索引与事务

news/2024/4/24 23:14:10/文章来源:https://blog.csdn.net/qq_33866936/article/details/130344988

目录

1.索引

创建索引

示例

注意

索引的数据结构

补充知识

2.事务

提交与回滚

使用方法

事务的特性(ACID)

①原子性:

②一致性:

③隔离性:

④持久性:

事务的隔离级别

①read uncommitted

②read committed

③repeatable

④serializable


1.索引

        为了提高查询效率而使用一种数据结构把数据组织起来,例如字典的索引

创建索引

对于非主键

# 查看表索引
show index from 表名

表中的主键默认自动创建索引

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

示例

create index index_student_sn_name on student(sn,name);    # 组合索引

注意

        ①一张表里至少会有一个索引:如果一张表里没有主键,MySQL会为每一行生成一个唯一的字段,并用这个字段当做索引

        ②索引一般创建在频繁查询的列上,且列中的值重复比较少

索引的数据结构

①Hash查询的时间复杂度O(1)

    MySQL没有使用hash作为索引的数据结构,因为ahsh不支持范围查找

②二叉搜索树的时间复杂度O(n),MySQL未使用

③红黑树的时间复杂度log(n),MySQL未使用

④B树可以降低树高,但仍未使用

MySQL中索引使用的B+树的叶子结点相互连接,且是一个双向循环链表

叶子结点中包含了树中所有结点的真实数据

非叶子结点中包含的是主键和叶子结点的引用

在一定的数据量范围内,不论查找到数据是什么,时间效率基本相同

重要的是叶子结点的数据是有序的

N叉搜索树有效的降低了树的高度,从而减少了磁盘IO次数

补充知识

①一个索引包含多个字段就叫组合索引

②索引本身占用磁盘空间

    更新和删除操作同时也会更新索引,建的太多也会有负担

③使用索引的最左原则:

    当使用组合索引(例如sn,name),在查询时where里面必须按顺序写sn和name,不然就没用上索引查询.尽管MySQL会自己优化反过来

④回表查询

    当select还包括除了索引列的其他列,那么会使用id到主键索引中查询完整结果.这个现象叫做回表查询

⑤索引覆盖

    当select里只有索引包含的,就不用回表查其他内容,直接返回结果,这个现象叫做索引覆盖

⑥主键索引中包含当前索引

⑦查找语句之前写explain关键字(查询执行计划)可以知道是否使用了索引

⑧索引失效的情况:最左原则,判断不等(每个都要判断),类型转换(与原类型不符),like'%xxx',索引列运算(改了原来的值),is null/is not null(全表都扫描了)

2.事务

        把一组SQL语句打包运行的机制

提交与回滚

        当其中有语句未执行成功,则会回滚

        当全部执行成功才会提交到数据库.提交之前,别的用户是看不到修改的,只能自己看到.

使用方法

start transaction;
# 输入各种语句;
# 输入各种语句;
# ......
rollback/commit;# rollback则取消上述所有操作
# commit则会提交修改到数据库

事务的特性(ACID)

①原子性:

        要么全执行,要么都不执行

②一致性:

        数据库从一个一致性状态到另一个一致性状态.即事务执行的前后,要保持正确的结果

③隔离性:

        多个事务执行过程中不能互相干扰

④持久性:

        事务提交就会写入磁盘永久保留,及时数据库服务故障也不影响数据内容

事务的隔离级别

多个事务之间是否可以相互影响?

如果可以相互影响,那么事务的隔离级别比较低,但是性能变高

如果不可相互影响,那么事务的隔离级别比较高,但是性能变低

①read uncommitted:读未提交

②read committed:读已提交

③repeatable:可重复读

④serializable:串行化

上面性能好安全性低,下面性能差安全性高

show variables like 'tx_isolation';    # 查询隔离级别set @@global.tx_isolation = 'READ-UNCOMMITTED'    # 设置隔离级别.重开才生效

①read uncommitted

        事务没有提交的时候,其他用户就能查出来.rollback之后 ,其他用户就查不出来了

这个现象叫"脏读",第一次读到了事务没有提交的数据,当事务回滚之后再次查询,发现没有这条数据.

②read committed

        解决了脏读,但可能出现不可重复读的状态

在写数据的时候加一把锁,写锁是一把排它锁,其他的读和写都不能

③repeatable

解决了不可重复读,但可能出现幻读

④serializable

隔离级别

脏读

不可重复读

幻读

read uncommitted

Y

Y

Y

read committed

N

Y

Y

repeatable

N

N

解决了大部分

serializable

N

N

N

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

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

相关文章

Java编程设计语言-集合类

API(application programming interface)是JDK的重要组成部分,API提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口,可以帮助开发者方便、快捷地开发Java程序 集合在程序设计中是一种重要的是数据结构,Java中提…

Semantic Kernel 知多少 | 开启面向 AI 编程新篇章

在 ChatGPT 火热的当下, 即使没有上手亲自体验,想必也对 ChatGPT 的强大略有耳闻。当一些人在对 ChatGPT 犹犹豫豫之时,一些敏锐的企业主和开发者们已经急不可耐地开展基于 ChatGPT 模型 AI 应用的落地探索。 因此,可以明确预见的是&#xf…

Java+Angular开发的医院信息管理系统源码,系统部署于云端,支持多租户

云HIS系统源码,采用云端SaaS服务的方式提供 基于云计算技术的B/S架构的云HIS系统源码,采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、…

系统分析师之软件工程(十二)

目录 一、 软件开发生命周期 1.1 开发阶段工作细分 二、软件开发模型 2.1 瀑布模型 2.2 原型模型 2.3 增量模型与螺旋模型 2.4 V模型 2.5 喷泉模型 2.6 快速应用开发模型RAD 2.7 构件主装模型 2.8 统一过程 2.9 敏捷方法 三、逆向工程 四、净室软件工程 一、 软件…

斯坦福| ChatGPT用于生成式搜索引擎的可行性

文|智商掉了一地 随着 ChatGPT 在文本生成领域迈出了重要一步,Bing 浏览器也接入了聊天机器人功能,因此如何保证 Bing Chat 等搜索引擎结果的精确率和真实性也成为了搜索领域的热门话题之一。 当我们使用搜索引擎时,往往希望搜索结…

电子阅读器市场角力,AI成为关键变量

配图来自Canva可画 近年来,随着国家“书香型社会”建设政策的出台,公众的阅读需求正在逐年增加,各类读书产品和读书活动,也如同雨后春笋般涌现,人们的阅读体验日益得到丰富。比如,昨天世界读书日举行的“不…

更简单的存取Bean方式-@Bean方法注解

1.Bean方法存储 类注解是添加在某个类上的,那么方法注解是添加在某个方法前的 public class UserBeans {Beanpublic User user1(){User user new User();user.setUid(001);user.setUname("zhangsan");user.setAge(19);user.setPassword("123123");retur…

【分布式搜索引擎ES01】

分布式搜索引擎ES 分布式搜索引擎ES1.elasticsearch概念1.1.ES起源1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引 1.3.es的一些概念1.3.1.文档和字段1.3.2.索引和映射1.3.3.mysql与elasticsearch 1.4.1安装es、kibana、IK分词器1.4.2扩展词词典与停用词词典 2.索引库操作2.1.mappi…

Springcloud连接nacos集群,nacos地址配置为nginx,报错:requst nacos server failed

先说下版本: Spring cloud: Hoxton.SR12 spring.cloud.alibaba: 2.2.9.RELEASE spring.boot: 2.3.12.RELEASE Linux Centos7 nacos-server:2.1.0 nginx: 1.20.2 环境说明: nacos正常搭建三个集…

supervisor安装

说明 Supervisor翻译过来是监管人,在Linux中Supervisor是一个进程管理工具,当进程中断的时候Supervisor能自动重新启动它。可以运行在各种类Linux/unix的机器上,supervisor就是用Python开发的一套通用的进程管理程序,能将一个普通…

【虚幻引擎】UE4/UE5科大讯飞文字合成语音

一、链接地址 链接:https://pan.baidu.com/s/15Qoc48x3DLpw4eW1qHXInQ 提取码:jqpx B站视频链接:https://space.bilibili.com/449549424?spm_id_from333.1007.0.0 二、案例介绍 第一步:首先进入讯飞开放平台注册一个账号&…

ThreadPoolExecutor源码阅读流程图

1.创建线程池 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultThreadFactory(), def…

Automa函数学习(三)

从变量中获取数据 当我们想要用automa获取文本标签获取到网页的文本内容后,想要将获取到的文本内容当做参数往后面的标签里进行传递时就需要用到automa提供的传参格式 {{ variables.自定义参数名}} 举例: 先建立打开百度首页工作流 前面自定义的变量名为text,所以这里参数拼接…

开放式耳机有什么好处,盘点几款性能不错的开放式耳机

随着人们对生活质量要求的提高&#xff0c;大家在运动的时候都喜欢戴上耳机&#xff0c;享受运动的乐趣。但是传统耳机戴久了之后就会出现耳朵酸痛的情况&#xff0c;这是因为传统耳机佩戴方式是通过空气振动来传递声音&#xff0c;而人在运动时就会伴随着大量的汗水&#xff0…

深入学习RabbitMQ五种模式(一)

1.安装erlang 下载otp_win64_25.3.exe https://www.erlang.org/downloads erlang安装完成&#xff0c;需要配置erlang环境变量 ERLANG_HOMEE:\software\Erlang OTPPATH%PATH%;%ERLANG_HOME%\bin; 2.安装RabbitMQ 下载rabbitmq-server-3.11.13.exe https://www.rabbitmq.com/dow…

【Python 协程详解】

0.前言 前面讲了线程和进程&#xff0c;其实python还有一个特殊的线程就是协程。 协程不是计算机提供的&#xff0c;计算机只提供&#xff1a;进程、线程。协程是人工创造的一种用户态切换的微进程&#xff0c;使用一个线程去来回切换多个进程。 为什么需要协程&#xff1f; …

IntelliJ IDEA 接入ChatGPT (免费,无需注册)生产力被干爆了!

IntelliJ IDEA 接入ChatGPT 前言 : 今天给大家介绍一款好用的 IntelliJ IDEA ChatGPT 插件 可以帮助我们写代码&#xff0c;以及语言上的处理工作&#xff0c;以及解释代码。让我们的生产力大大提高&#xff01; 一. ChatGPT-Plus 功能介绍 支持最新idea版本AI询问功能,写好…

Adobe Photoshop 软件下载

Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。 时至今日&#xff0c;Adobe Photoshop 已经成为当今世界上最流行、应用最广泛的图像处理软件。不但设计专业的学生要系统的学习这个…

智能建筑中电力监控系统的应用与产品选型

摘要&#xff1a;近几十年&#xff0c;中国现代化经济不断发展&#xff0c;计算机技术、信息技术等相关产业也取得了飞跃性的进步。随着商业、生活以及公共建筑不断提高智能管理和节能的要求&#xff0c;电力监控系统开始逐渐渗入人们的日常生活&#xff0c;发挥着不可替代的作…

算法刷题|0-1背包问题、416.分割等和子集

0-1背包问题 什么是0-1背包&#xff1f; 有i个物品和一个容量为j的背包&#xff0c;每个物品有重量和价值两个属性&#xff1b;求容量为j的背包能装的物品的最大价值是多少。每个物品智能使用一次。 二维dp数组 dp[i][j]的含义&#xff1a;表示从前i个物品中&#xff0c;当前…