当前位置: 首页 > news >正文

Mysql存储引擎

目录

一、前言

二、存储引擎

1、InnoDB存储引擎

1.1、简介

1.2、优势

1.3、使用方法

1.4、性能

2、MyISAM存储引擎

2.1、优势

2.2、使用方法

2.3、性能

3、MEMORY存储引擎

4、MyISAM

三、比较

四、总结

一、前言

MySQL是开放源代码的关系型数据库管理系统,由于其体积小、速度快、总体拥有成本低等特点,被广泛应用于各种应用领域。在MySQL中,存储引擎是负责管理数据库中数据存储和处理的核心模块。本文将详细介绍MySQL的存储引擎,包括其功能、特点、使用方法和性能等方面。

二、存储引擎

1、InnoDB存储引擎

1.1、简介

InnoDB是 MySQL 默认的事务型存储引擎,只有在需要它不支持的特性时,才考虑使用其它存储引擎

实现了四个标准的隔离级别,默认级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下,通过多版本并发控制(MVCC)+ 间隙锁(Next-Key Locking)防止幻影读。

主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很大的提升。

内部做了很多优化,包括从磁盘读取数据时采用的可预测性读、能够加快读操作并且自动创建的自适应哈希索引、能够加速插入操作的插入缓冲区等。

支持真正的在线热备份。其它存储引擎不支持在线热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合场景中,停止写入可能也意味着停止读取。

1.2、优势

支持事务处理、外键约束、MVCC等;具有较好的并发性能和稳定性。

1.3、使用方法

在创建表时使用InnoDB作为存储引擎,或者通过修改MySQL配置文件来设置默认存储引擎为InnoDB。

1.4、性能

InnoDB在性能和数据完整性方面表现较好,尤其适用于高并发读写和数据一致性要求较高的场景。

2、MyISAM存储引擎

MyISAM是一种非事务性的存储引擎,它不支持事务、行级锁定和外键约束等功能。MyISAM提供了快速的读取性能和较小的数据库文件大小,适用于以读为主的场景,如新闻网站、博客等。

2.1、优势

快速读取性能、较小的数据库文件大小。

2.2、使用方法

在创建表时使用MyISAM作为存储引擎,或者通过修改MySQL配置文件来设置默认存储引擎为MyISAM。

2.3、性能

MyISAM在读取性能方面表现较好,适用于读密集型应用场景,但写入性能相对较差。

3、MEMORY存储引擎

MEMORY存储引擎将所有数据存储在内存中,因此具有非常快的查询速度。然而,如果数据库服务器重启,数据将丢失。MEMORY存储引擎适用于临时表和缓存等场景。

优势:极快的查询速度。

使用方法:在创建表时使用MEMORY作为存储引擎。

性能:MEMORY在查询速度方面表现极佳,但数据是存储在内存中的,因此如果服务器重启,数据将丢失。

4、MyISAM

设计简单,数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,则依然可以使用它。

提供了大量的特性,包括压缩表、空间数据索引等。

不支持事务

不支持行级锁,只能对整张表加锁,读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁。但在表有读取操作的同时,也可以往表中插入新的记录,这被称为并发插入(CONCURRENT INSERT)。

可以手工或者自动执行检查和修复操作,但是和事务恢复以及崩溃恢复不同,可能导致一些数据丢失,而且修复操作是非常慢的。

如果指定了 DELAY_KEY_WRITE 选项,在每次修改执行完成时,不会立即将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘。这种方式可以极大的提升写入性能,但是在数据库或者主机崩溃时会造成索引损坏,需要执行修复操作。

三、比较

  • 事务: InnoDB 是事务型的,可以使用 Commit 和 Rollback 语句。

  • 并发: MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。

  • 外键: InnoDB 支持外键。

  • 备份: InnoDB 支持在线热备份。

  • 崩溃恢复: MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。

  • 其它特性: MyISAM 支持压缩表和空间数据索引。

四、总结

MySQL的存储引擎是其核心功能之一,每种存储引擎都有其自身的特点和适用场景。InnoDB适用于高并发读写和数据一致性要求较高的场景,MyISAM适用于读密集型应用场景,MEMORY则适用于临时表和缓存等场景。在选择存储引擎时,应根据应用需求和性能要求进行综合考虑。未来随着技术的不断发展,MySQL的存储引擎也将不断改进和完善,以满足更多应用场景的需求。


相关文章:

Mysql存储引擎

目录 一、前言 二、存储引擎 1、InnoDB存储引擎 1.1、简介 1.2、优势 1.3、使用方法 1.4、性能 2、MyISAM存储引擎 2.1、优势 2.2、使用方法 2.3、性能 3、MEMORY存储引擎 4、MyISAM 三、比较 四、总结 一、前言 MySQL是开放源代码的关系型数据库管理系统&…...

算法通关村-----数组实现加法专题问题解析

数组实现整数加法 问题描述 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。详见leetcode66 问题…...

倒排表的压缩算法

For压缩算法 这是倒排表的一种压缩算法。 还是那个问题,如果"小米" 这个词项,在多文档里都有,则就会导致倒排表很大,这时候就会设计到了压缩算法,这里说的是,倒排表。 那末我们来看看 for压缩…...

Android studio实现自定义圆形进度条 带刻度进度条 计步效果 时速表 水波纹效果

目录 原文链接效果图values /layout /activity原文链接 效果图 点击重置后: 该项目总共实现了三种圆形进度条效果 CircleProgress:圆形进度条,可以实现仿 QQ 健康计步器的效果,支持配置进度条背景色、宽度、起始角度,支持进度条渐变DialProgress:类似 CircleProgress,…...

使用【宝塔+docker】在云服务器上部署基于SpringBoot 和 Dubbo RPC 的项目:踩坑记录

待部署的项目包括:前端front,服务提供者backend,服务消费者gateway,注册中心nacos 服务器信息:腾讯云入门级服务器2核2G(后续有对服务器进行升级) 部署工具:前端使用宝塔部署&#x…...

【算法与数据结构】617、LeetCode合并二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:采用递归的方式遍历二叉树,【算法与数据结构】144、94、145LeetCode二叉树的前中后遍历&am…...

ffmpeg把RTSP流分段录制成MP4,如果能把ffmpeg.exe改成ffmpeg.dll用,那音视频开发的难度直接就降一个维度啊

比如,原来我们要用ffmpeg录一段RTSP视频流转成MP4,我们有两种方案: 方案一:可以使用以下命令将rtsp流分段存储为mp4文件 ffmpeg -i rtsp://example.com/stream -vcodec copy -acodec aac -f segment -segment_time 3600 -reset_t…...

朝夕光年游戏自动化测试实践

朝夕光年是面向全球用户与开发者的游戏研发与发行业务品牌,致力于服务全球玩家,帮助玩家在令人惊叹的虚拟世界中一起玩耍与创造。 在游戏的研发过程中,游戏自动化一直是开展难度较大的工程,具体包括机房机架、设备调度、软件框架、…...

数据结构基本概念

一、数据 数据对象-数据元素-数据项(属性),前者由后者组成 二、数据结构 定义:按某种关系的数据元素的集合 三、数据类型 1、原子类型(例如整型) 2、结构类型(由原子类型组成,例如数组) 3、…...

【javaweb】学习日记Day9 - Mybatis 基础操作

目录 一、删除 (1)在mapper接口执行sql删除语句 ① 注解后sql语句没有提示怎么办? (2)测试层 (3)开启mybatis日志 (4)预编译SQL 二、新增 (1&#…...

Mybatis学习|Mybatis缓存:一级缓存、二级缓存

Mybatis缓存 MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。 MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地…...

230903文本docx

处理文本 块级项目,每次文本超出右边界时都会添加一行.对段落,边界一般是页边距,但如果按列布局页,则也可是列边界,如果表格单元格内有段,则也可是单元格边界. 块级项属性指定其在页上的位置,如缩进项及段落前后间距.内联项属性一般指定显示内容的如字样,字体大小,粗体和斜体…...

Mysql-DML(数据处理语言)

-- 插入数据 insert into member values(1,张三,21,5000); insert into member(id,name) values(2,李四); insert into member values(3,王五,23,3000) ,(4,纪六,24,4000) ,(5,查七,25,5000); -- 更新(修改数据) 不加限制条件 该字段全部修改 update member set age…...

部署项目至服务器

安装conda https://zhuanlan.zhihu.com/p/489499097 个人租借的服务器如何进行端口的开放呢? 防火墙设置: 添加规则设置: 即可; 通常下租借的服务器没有防火墙设置 相关链接: https://blog.csdn.net/weixin_4520…...

OSI与TCP IP各层的结构与功能,都有哪些协议

分析&回答 OSI七层模型 层功能TCP/IP协议族应用层文件传输,电子邮件,文件服务,虚拟终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet表示层数据格式化,代码转换…...

【2023年11月第四版教材】第10章《进度管理》(第三部分)

第10章《进度管理》(第三部分) 7 估算活动持续时间7.1 估算活动持续时间7.2 类比估算★★★7.3 参数估算★★★7.4 三点估算★★★7.5 数据分析★★★ 7 估算活动持续时间 组过程输入工具和技术输出计划4,估算活动持续时间1.项目管理计划(进…...

【Vuex状态管理】Vuex的基本使用;核心概念State、Getters、Mutations、Actions、Modules的基本使用

目录 1_应用状态管理1.1_状态管理1.2_复杂的状态管理1.3_Vuex的状态管理 2_Vuex的基本使用2.1_安装2.2_创建Store2.3_组件中使用store 3_核心概念State3.1_单一状态树3.2_组件获取状态3.3_在setup中使用mapState 4_核心概念Getters4.1_getters的基本使用4.2_getters第二个参数4…...

Linux centos7 bash编程(循环与条件判断)

在编程训练中,循环结构与条件判断十分重要。 根据条件为真为假确定是否执行循环。 有时,根据条件的真假结果,决定执行哪些语句,这就是分支语句。 为了训练分支语句与循环语句,我们设计一个案例: 求一组…...

设计模式-6--装饰者模式(Decorator Pattern)

一、什么是装饰者模式(Decorator Pattern) 装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许你在不修改现有对象的情况下,动态地将新功能附加到对象上。这种模式通过创建一个包装类,…...

质量属性案例-架构真题(二十一)

试题一 某电子商务公司升级会员与促销管理系统,向用户提交个性化服务,提高用户粘性。在项目建立之初,公司领导人一致认为目标是提升会员管理方式的灵活性,由于当前用户规模不大,用户简单,系统方面不需要做…...

千问3.5-2B在办公提效场景:会议白板照片文字提取+要点总结实战

千问3.5-2B在办公提效场景:会议白板照片文字提取要点总结实战 1. 办公场景的痛点与解决方案 1.1 会议记录的传统困境 每次开完会,最让人头疼的就是整理会议记录了。特别是那些在白板上写满讨论要点的会议,你需要: 对着白板照片…...

背包模型(求组合)?爬楼梯模型(求排列)?

普通背包模型和爬楼梯模型是非常相似的两个模型。 首先,我们定义一个**“抽象背包模型”**(注意这个抽象背包模型不是前面提到的普通背包模型):给定 n 个物品,装满容积为 m 的背包,求方案数/具体方案/等等…...

当知识有了‘关系网‘:LightRAG如何让大模型‘秒懂‘你的文档?

想象一下,你有一座藏书万卷的图书馆,但你找书的方式只有一种——记住每本书某个页面的关键词,然后靠"猜"来定位。 这,就是传统RAG系统的尴尬处境。 今天要介绍的这个开源项目LightRAG,被顶会EMNLP 2025接收…...

Vision Transformer在timm中的实现与优化

Vision Transformer在timm中的实现与优化 【免费下载链接】pytorch-image-models The largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Visi…...

从单张图片到动态世界:Depth-Anything-3如何重塑3D视觉的通用法则

1. 当单张图片学会"思考"深度 第一次看到Depth-Anything-3(DA3)处理一张普通照片时,我盯着屏幕足足愣了三分钟。它就像给二维世界突然装上了Z轴——原本平淡无奇的街景照片,在DA3的解构下,近处的咖啡杯轮廓清…...

如何快速掌握MelonLoader:从零基础到精通Unity游戏模组加载的完整教程

如何快速掌握MelonLoader:从零基础到精通Unity游戏模组加载的完整教程 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader …...

抖音批量下载工具:高效获取无水印视频与图文内容的全攻略

抖音批量下载工具:高效获取无水印视频与图文内容的全攻略 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

RB3201-RBProtocol:ESP32机器人轻量通信协议栈解析

1. RB3201-RBProtocol 库深度解析:面向机器人控制的轻量级嵌入式通信协议栈 1.1 协议背景与工程定位 RB3201-RBProtocol 是由 RoboticsBrno 团队开发的嵌入式通信协议库,专为 ESP32 平台设计,核心目标是实现与 Android 端 RbController 移动…...

告别手写CRUD:用IDEA插件实现数据库到Java代码的智能生成

1. 为什么我们需要告别手写CRUD? 作为一名有多年开发经验的程序员,我深知手写CRUD代码的痛苦。每次新建一个表,就要重复编写几乎相同的实体类、Mapper接口和XML文件。这种重复劳动不仅枯燥乏味,还容易出错。记得有一次我因为手误把…...

GyverTimers:ATmega硬件定时器寄存器级精准控制

1. GyverTimers 库深度技术解析:面向 ATmega328P 与 ATmega2560 的硬件定时器全功能控制 GyverTimers 是一款专为 AVR 微控制器设计的轻量级、高精度硬件定时器控制库,其核心价值在于 绕过 Arduino 框架的抽象层,直接操作 ATmega 系列 MCU 的…...