MySQL 存储引擎

存储引擎:MySQL当中数据用各种不同的技术存储在文件中,每一种技术都使用的是不同的存储机制,索引技巧 锁定水平。以及最终提供的不同功能和能力,这写就是我们说的存储引擎。

功能:

1,mysql将数据存储在文件系统中的一种方式和格式

2,存储引擎负责执行数据I/O操作。

3,存储引擎介于数据和文件系统之间,数据会先保存到存储引擎,再按照存储引擎的格式保存到文件系统。

mysql的存储引擎的分类:

1,INNODB:5.5之后MySQL的默认存储引擎。又叫做事务性速记引擎

支持ACID事务,支持行锁,锁表。写入和查询性能比较好。

2,MYISAM:5.5之前的默认存储引擎。插入数据的性能比较高,查询速度也很优秀,但是不支持事务。

3,memory:所有数据都保存再内存的存储引擎。插入数据,更新,查询数据,速度比较快。但是占用内存空间比较大。会和占用和数据量成正比的内存空间。mysql一旦重启,内容就会丢失。

4,csv:由2逗号分割数据的存储引擎。他会在数据库子目录里为每一个数据表创建一个.csv的文件。就是一种普通的文本文件每个数据行占用文本行,csv不支持索引。

5,Archive:非常适合存储大量的独立的,历史数据的引擎。不需要被经常读取。插入的速度很快。查询的效率比较低。

6,blackhole:黑洞引擎,写入的任何数据都会消失。

查看mysql的存储引擎:show engines\G;

INNODB和MYISAM做个分析对比:

MYISAM:不支持事务,也不支持外键,只2支持全文索引,数据文件和索引文件是分开的。访问速度快。

适用场景:查询和插入为主的应用。

在磁盘上有三个文件:

文件名和表名相同。但扩展名不同:

.fm 存储的表结构

.MYD 数据文件

.MYI 索引文件

如何修改:

1,在配置文件里修改:但只对新建的表生效

2,直接修改:

alter table 表名 engine=myisam(自己选择的引擎)

3,在创建表的时候修改引擎

MYISAM的特点:

1,表级锁定,在更新任何表的时候

2,数据库在读写过程中相互阻塞。不能对一个表又读又写

支持的存储格式:

1,静态表,固定长度表,静态表式myisam的默认存储格式。静态表中字段都是非可变字段。每个记录都是固定长度的。存储快2,方便存储,有了故障容易恢复。缺点是占用空间比较多。

2,动态表,动态表可以包含可变字段,记录的长度是不固定的。优点的占用空间少。频繁更新数据,删除记录,会产生碎片。需要定期清理。myisamchk -r 出现故障恢复比较困难。

3,压缩表:myisamchk工具创建的,占据空间小,每一条记录都是单独压缩的。

INNODB:

支持事务,支持4个事务的隔离级别。5.5之后是MySQL的默认存储引擎。

读写阻塞和隔离级别相关。

支持高效的缓存索引以及缓存数据。

表与主键以簇方式存储BTREE。

支持外键约束,5.5之后INNODB也支持全文索引。

硬件要求比较高。

支持行级锁定,也可以支持表锁定(全表扫描)。

1,使用like模糊查询,会对行全表扫描,锁定整个表

2,对没有创建索引的字段进行查询,也会进行全表扫描。锁定整个表。

3,使用索引,进行增删改,则是行级锁定。

innodb的特定:

1,不保存表的行数,统计表的行数,会扫描一遍整个表来计算有多少行。

2,自增长字段,INNODB必须包含只有该字段的索引

3,delete清空表,是一行一行删,推荐速度比较快 truncate

适用场景:

1,业务需要事务的支持。

2,论坛,微博,对数据一致性比较高的场景

3,访问量和并发量比较高的场景,innodb支持缓存,减少后台服务器的压力。

三个文件:

cd /usr/local/mysql/data/chen/

表名:.frm (表结构文件)

表名:.idb (即是表数据文件也是表索引文件)

表名:dp.opt (表属性文件) 所有的属性文件保存在一块

innodb行锁和索引的关系

行级锁定:

如果说使用的id的字段是主键,innodb对主键使用聚簇索引,锁定整行的记录

innodb锁表,要对一个非索引键进行操作,没有索引要对全表进行扫描。整张表都会被锁定,另一个事务只能查。

排他锁:只有自己事务提交操作之后,别的事务才能操作。悲观锁。

对一行进行排他锁

乐观锁:不会有任何提示,只是数据不能写入。数据提交更新时,进行校验,发生冲突,数据不生效而已,没有用其他报错或者卡停。

死锁:事务之间相互等待对方资源,最后形成一个环路造成的。

1,当死锁发生时候,数据库会自动选择一个事务作为受害者,然后先解除死锁在回滚事务。

2,发生死锁mysql的默认机制,会选择一个事务作为死锁的牺牲品。直到结束,可以手动回滚。

索引只会锁表

非索引锁表

排他锁,一个事务在操作,另一个事务的操作无法执行,只能查,只能加一个。

死锁,会自动选择一个事务作为牺牲品,结束死锁

1,存储引擎只能是innodb

2,mysql默认隔离级别即可。

如何尽可能的避免死锁:

1,业务的逻辑要合理,以固定的顺序访问表和行

2,如果事务的类型比较复杂,要进行拆分,在业务允许的情况下,把大事务拆小。

3,在同一事务中,尽可能尽可能一次性锁定所有需要的资源,可以减少死锁的概率

4,隔离级别,如果要避免死锁。可以用read commit

5,添加合理索引,可以减少死锁的概率。

核心内容:索引和行锁之间的关系 非索引的锁表,以及死锁。排他锁

innodb的机制,和存储文件格式。

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

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

相关文章

接口自动化测试 —— 工具、请求与响应

一、工具: 1.工具介绍 postman :很主流的API测试工具,也是工作里面使用最广泛的研发工具。 JMeter: ApiPost: 2.安装postman: 安装好直接打开,不用注册。 二、通信模式: 1、…

【golang】Reflect反射整理、值修改、反射结构体、应用

Reflect 整理 反射是用程序检查其所拥有的结构,尤其是类型的一种能力;这是元编程的一种形式。反射可以在运行时检查类型和变量,例如:它的大小、它的方法以及它能“动态地”调用这些方法。这对于没有源代码的包尤其有用。这是一个强…

vite搭建vue3项目

npm init vite-app 项目名称 如果没安装vite就按照提示安装一下 运行 Done. Now run: cd smartWaterSystemnpm install (or yarn)npm run dev (or yarn dev)运行成功页面

Pytest-Allure及Allure命令使用

一、Allure介绍 Allure是Pytest用于生成测试报告的框架,提供丰富的测试报告功能; 二、Allure安装 Allure安装分为2块,分别是pytest-Allure库安装,本地生成报告并导出的命令行allure安装; 1、pytest-Allure库安装 …

适合女生的副业有哪些?整理了六个靠谱副业,女生必看

在这个互联网时代下,女生对于经济独立变得越来越看重。她们与男生一样,对于工作认真努力、追求进步,并且对于副业有着强烈的渴望和热爱。事实上,她们在副业领域的表现要远远超过很多男生,这一点不可否认。 女生在副业方…

客服管理者如何调动客服人员的积极性?

客户是企业的财富,良好的客户服务体验可以有效地促进企业的销售和声誉,因此,客服工作显得尤为重要。而客服人员的积极性直接影响了整个客服部门的质量和效率。如何调动客服人员的积极性,成为了每个客服管理者都需要面对的难题。本…

管理如何实现制度流程化 流程表单化 表单信息化 信息标准化?

业务化、流程化、信息化、数字化、自动化、智能化,是企业业务管理发展路径的六个必经阶段 制度业务化,业务表单化,表单流程化、流程信息化、信息标准化、标准制度华。 制度流程化、流程表单化、表单信息化、信息标准化、标准制度华。 管理…

Ubuntu 20.04设置虚拟内存 (交换内存swap)解决内存不足

数据库服务器程序在运行起来之后,系统内存不足。 在系统监控中发现,当数据库服务程序启动后,占用了大量内存空间,导致系统的剩余的内存往往只有几十MB。 在ubuntu系统中,swap空间就是虚拟内存,所以考虑在磁…

实践笔记-docker-compose安装

docker-compose 1.在线安装2.离线安装 1.在线安装 # github下载(太慢了或者直接下载不了) curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose # daocloud下载 c…

SSM校园设备管信息管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

选题理由 随着计算机网络及多媒体技术的广泛应用,互联网已成为高校办学的基础设施和必备条件,基于互联网的高校信息管理越来越综合化,越来越多的教学管理、行政管理工作将架构在互联网上,互联网正在变为学校实施教学、科研和管理…

Docker dnmp 多版本php安装 php8.2

Laravel9 开发需要用到php8.1以上的版本,而dnmp只支持到php8.0。安装php8.2的步骤如下: 1. 从/services/php80目录复制一份出来,重命名为php82,extensions目录只保留 install.sh 和 install-php-extensions 这两个文件 2. 修改.en…

https原理

首先说一下几个概念:对称加密、非对称加密 对称加密: 客户端和服务端使用同一个秘钥,分两种情况: 1、所有的客户端和服务端使用同一个秘钥,这个秘钥被泄漏后数据不再安全 2、每个客户端生成一个秘钥&…

时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测

时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测 目录 时序预测 | Python实现ARIMA-CNN-LSTM差分自回归移动平均模型结合卷积长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 …

低保真原型图:如何在设计初期就把握产品方向

在设计和开发数字产品时,原型图是一个至关重要的工具。原型图是产品设计的蓝图,它帮助设计师和开发者在产品开发过程中更好地理解和沟通他们的想法。在原型图领域,有一个广泛使用的概念,那就是“低保真原型图”。本文将探讨什么是…

中国人民大学与加拿大女王大学金融硕士—重要的是,你一直在努力

人虽然生下来就分三六九等,不同的人过着不同的生活,我的生活没办法选择,我只能尽我所能的让自己变得优秀。中国人民大学与加拿大女王大学金融硕士是我们无论怎样都可以变优秀的优质渠道。V13146152701 那么我们为什么要读研,读研…

c++qt学习对象树

1.当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放在对象树中。 2.一定程度上简化了内存回收机制 构造顺序与析构顺序相反

[架构之路-250/创业之路-81]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业内的数据与数据库

目录 一、数据概述 1.1 数据 1.2 企业信息系统的数据 1.3 大数据 1.4 数据与程序的分离思想 1.5 数据与程序的分离做法 1.6 数据库的基本概念 1.7 企业数据来源 1.8 企业数据架构 二、常见的数据库类型 2.1 数据库分类 2.1 数据库类型 2.2 常见的数据库类型、应用…

GZ035 5G组网与运维赛题第10套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第10套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子…

SpringBoot SerializationUtils克隆(反序列化) 类加载器不一致问题(ClassCastException)

问题分析 在SpringBoot中使用 org.apache.commons.lang.SerializationUtils.clone 方法时,发现克隆出来的类强转对应类时发生类型不一致的错误,经过检测发现两个看似相同的类的类加载器不一致 场景 报错信息 java.lang.ClassCastException: com.tianq…

【PyTorch 卷积】实战自定义的图片归类

前言 卷积神经网络是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一,它通过卷积层、池化层、全连接层等结构,可以有效地处理如时间序列和图片数据等。关于卷积的概念网络上也比较多,这里就不一一描述了。…