mysql 存储引擎

存储引擎

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

功能

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

2、存储引擎负责执行实际的数据I/O操作

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

MySQL的存储引擎的分类

1、INNODB

5.5版本之后MySQL的默认存储引擎,又叫事务型速记引擎。支持ACID事务、支持行锁、支持锁表。写入和查询性比较好

2、MYISAM

5.5版本之前默认的存储引擎。有较高的插入数据的性能,查询速度也很优秀。不支持ACID

3、MEMORY

把所有数据保存在内存的存储引擎。插入数据、更新数据、查询数据速度都比较快,但是占用内存空间比较大。会占用和数据量成正比的内存空间,一旦服务重启,内容就会全部丢失。

4、CSV

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

5、ARCHIVE  [ˈɑː(r)kaɪv]

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

6、blackhole  黑洞/黑洞引擎

写入的任何数据都会消失

MYISAM和INNODB做个分析和对比

MYISAM:①不支持事务、不支持外键,只支持全文索引。数据文件问索引文件是分开的;

②访问速度快

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

在磁盘上有三个文件:

①文件名和表名相同,但是扩展名不同。

.frm 存储的表结构

.MYD  数据文件

.MYI  索引文件

修改默认引擎

法一 改表

或者

法二 进入配置文件进行修改

vim /etc/my.cnf进入配置文件进行修改

只对新建的表有效

或者

法三 建表的时候改

MYISAM的特点

1、表级锁定

更新数据时,整个都将锁定。

2、数据库在读写过程中相互阻塞

支持的存储格式

1、静态表,固定长度表

静态表式MYISAM的默认存储格式。静态表中字段都是非可变字段。每个记录都是固定长度的

存储快,方便缓存,有了故障容易恢复。缺点是占用空间比较多

2、动态表

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

3、压缩表

myisamchk工具创建的。占用的空间非常小,每条记录都是单独压缩的

INNODB

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

读写阻塞和隔离级别相关

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

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

支持外键约束,5.5版本之后INNODB也可以支持全文索引

对硬件资源的要求比较高。

支持行级锁定和表级锁定(全表扫描)

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

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

3、使用索引,进行查询,则是行级锁定

INNODB的特点

1、不保存表的行数。

如果要统计表的行数,会扫描一遍整个表来计算有多少行

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

3、delete清空表时,一行一行删,速度比较慢。推荐使用truncate

适用场景

1、业务需要事务的支持

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

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

储存文件的格式

三个文件

表名.frm  表结构文件

表名.idb  既是索引文件,又是索引名

dp.opt  表的属性文件

innodb的行锁和索引的关系,以及表锁、排他锁、死锁

delete from try where name = '花开';

如果name字段是一个普通索引,会锁住索引行,紧接着对应的主键一并锁定,实际上就是行锁

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

锁定表,要对一个非索引键进行操作

当一个事务对非索引列进行操作,因为要全表扫描过滤,所有整张表都会被锁定,另一个事务只能查,其他啥也干不了。排他锁只能加一个。又叫悲观锁

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

死锁

两边互相卡住,相当于死循环

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

for update  排他锁

1、发生死锁的时候,数据库会自动选择一个事务做为受害者,然后会先解除死锁,再回滚事务

2、mysql的默认的死锁机制,会中选择一个事务作为死锁的牺牲品,直接终止其中一个事务,但是不会自动回滚。这是MySQL默认的机制

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

注意事项

1、存储引擎只能innodb

2、mysql默认隔离级别即可

如何尽可能的避免死锁

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

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

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

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

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

核心内容

1、索引和行锁之间的关系

2、非索引的锁表以及死锁、排他锁

3、innodb的机制和存储文件格式

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

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

相关文章

【LVS实战】03 LVS负载均衡-DR模式实验

本文介绍,如何通过ipvsadm配置负载均衡,并且转发模式为DR直接路由模式 一、网络拓扑 如下图: LVS负载均衡的机器,配置了一个VIP:10.1.0.7 二、前置准备 每台机器关闭防火墙 systemctl stop firewalldRS装好ngin…

如何用 GPT-4 全模式(All Tools)帮你高效学习和工作?

「十项全能」的 ChatGPT ,用起来感受如何? 之前,作为 ChatGPT Plus 用户,如果你集齐下面这五个模式,就会成为别人羡慕的对象。 但现在,人们更加期盼的,是下面这个提示的出现: 这个提…

ZZ038 物联网应用与服务赛题第I套

2023年全国职业院校技能大赛 中职组 物联网应用与服务 任 务 书 (I卷) 赛位号:______________ 竞赛须知 一、注意事项 1.检查硬件设备、电脑设备是否正常。检查竞赛所需的各项设备、软件和竞赛材料等; 2.竞赛任务中所使用的各类软件工…

http中的Content-Type类型

浏览器的Content-Type 最近在做web端下载的时候需要给前端返回一个二进制的流,需要在请求头中设置一个 writer.Header().Set("Content-Type", "application/octet-stream")那么http中的Content-Type有具体有哪些呢?他们具体的使用场…

超详细的wheel轮子下载和.whl安装

wheel安装 pip安装失败问题 基于Anaconda进行 pip install ,报如下 但基于此路径下安装.whl文件时候,会报如下 通过在可借鉴的博客上查找相关原因,发现原来是因为版本没有匹配的问题,基于此问题以及博客中的解决方案,进行亲测…

Pandas练手项目

一、chipotle tsv 数据集:chipotle.tsv-数据集 代码:https://download.csdn.net/download/Albert233333/88508819 1 导入数据 # order_id这一列相同的数字表示 一个消费者同一次进行的交易 # 表格中的每一行表示 用户一次购买的某一个品类 购买的数量…

1、Sentinel基本应用限流规则(1)

Sentinel基本应用&限流规则 1.1 概述与作用 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。缓存、降级和限流是保护微服务系统运行稳定性的三大利器。 缓存:提升系统访问速度和增大系统能处理的容量 降级:当服务出问题或者影…

12 款小众宝藏AI工具,90% 的开发者不了解

AI工具的发展一日千里,了解这些AI工具的功能以及它们如何提高开发过程中的效率和创新,变得尤为重要,这里分享了 12个宝藏的人工智能和低代码工具,希望对大家的工作与学习有所帮助。 1.Pieces for Developers 网址:ht…

Technology Strategy Pattern 学习笔记5 -Creating the Strategy-Department Context

Creating the Strategy-Department Context 1 situations This pattern helps you organize your thoughts, and consider the department holistically in the following situations 1.1 •Aligning teams around a vision, especially a new direction 1.2 •Setting up a …

presto插件机制揭秘:探索无限可能的数据处理舞台

文章目录 1. 前言2. Presto插件架构3. Plugin接口3.1 插件协议3.2 插件实现类 4. 插件加载过程4.1 PluginManager 5. 插件应用6. 总结 关键词:Presto Plugin 1. 前言 本文源码环境: presto: prestoDb 0.275版本 在Presto框架中插件机制设计是一种非常常见…

lombok依赖介绍(帮助我们消除冗长代码,如get,set方法)

前言 lombok 是一个 Java 工具库,通过注解的方式,简化 Java 开发。要想使用 lombok 中的注解,我们需要先引入依赖,推荐看idea必装插件EditStarters(快速引入依赖),lombok是⼀款在编译期⽣成代码…

随身wifi编译Openwrt的ImmortalWrt分支

背景: 之前用酷安上下载的苏苏亮亮版友提供的Openwrt,在高通410棒子上刷机成功,但编译一直就没搞定。近期听说又出了个分支版本ImmortalWrt,刷了个版本,感觉界面清爽不少,内核也升级,遂打算搞定…

【Redis】SSM整合Redis注解式缓存的使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Redis》。🎯🎯 &#x1f4…

【ML】分类问题

分类问题 classification:根据已知样本特征,判断输入样本属于哪种已知样本类。 常用入门案例:垃圾邮件检测、图像分类、手写数字识别、考试通过预测。 分类问题和回归问题的明显区别: 分类问题的结果是非连续型标签&#xff0c…

Netty入门指南之传统通信的问题

作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者! 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏:Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言多线程…

基于APM(PIX)飞控和missionplanner制作遥控无人车-从零搭建自主pix无人车无人坦克

前面的步骤和无人机调试一样,可以参考无人机相关专栏。这里不再赘述。 1.安装完rover的固件后,链接gps并进行校准。旋转小车不同方向,完成校准,弹出成功窗口。 2.校准遥控器。 一定要确保遥控器模式准确,尤其是使用没…

轻量封装WebGPU渲染系统示例<20>- 美化一下元胞自动机(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/GameOfLifePretty.ts 系统特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据(内外部相关资源)和渲染机制分离…

使用Anaconda安装TensorFlow环境以及没有搜到的报错的解决方法

1.在官网下载Anaconda 这一步几乎不会有人报错 下稳定的版本 或者最新的版本都可以 2.TensorFlow分两个版本 一个是用cpu跑 另一个是用gpu跑 显而易见 cpu的计算性能已经比不上现在主流的显卡了 所以有独显的电脑尽量安装gpu版本 CPU版本: 先给出cpu版本的安装方法: 打开A…

描述低轨星座的特点和通信挑战,以及它们在5G和B5G中的作用。

文章目录 2章4 章5章(没看)6章(没看) 2章 将卫星星座中每个物理链路中可实现的数据速率、传播延迟和多普勒频移与3GPP技术报告中的参数进行分析和比较[3]。 相关配置 面向连接的网络,预先简历链路 卫星和地面终端有…

自动化测试--验证邮件内容

场景 业务上有许多发送邮件的场景,发送的邮件基本上都是自动发送的,而且邮件内容是很重要的,对于邮件发没发送,发送的时间点对不对每次回归测试工作量太大了,所以考虑把这部分内容加入到自动化测试中 工具 python g…