一文彻底弄懂MySQL的各个存储引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB
MySQL 中的存储引擎是其数据库管理系统的核心模块,用于处理不同类型的数据存储和检索操作。每种存储引擎都有自己的特点,适用于不同类型的应用场景。MySQL 最常用的存储引擎包括 InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB 等。以下是对 MySQL 存储引擎的详细介绍。
1. InnoDB 存储引擎
主要特点:
- 事务支持:InnoDB 是 MySQL 中默认的存储引擎,支持完整的 ACID 事务(Atomicity, Consistency, Isolation, Durability)特性。它还提供了事务的隔离级别,可以防止脏读、不可重复读、幻读等问题。
- 行级锁定:InnoDB 使用行级锁定(Row-level Locking),这使得它非常适合高并发的写操作,锁冲突的概率较小。
- 外键支持:InnoDB 支持外键约束,因此可以在表与表之间定义数据的依赖关系,并自动维护参照完整性。
- 崩溃恢复:InnoDB 通过使用 重做日志(Redo Logs) 和 撤销日志(Undo Logs) 来保证在系统崩溃时的数据恢复能力。
- 聚簇索引:InnoDB 使用聚簇索引(Clustered Index),主键索引和数据存储在一起。每个表必须有一个主键,如果没有定义主键,InnoDB 会自动生成一个隐藏的主键。
适用场景:
InnoDB 非常适合处理需要高并发的事务系统,例如:
- 银行交易系统:涉及到大量的插入、更新操作,并且需要保证事务的完整性和隔离性。
- 电子商务平台:需要频繁的订单插入和库存更新,并保证数据一致性。
工作机制(底层实现):
- 数据存储结构:InnoDB 将表存储在一个逻辑的表空间中,默认情况下使用共享表空间
ibdata
文件,也可以每个表单独存储在自己的.ibd
文件中。 - 缓冲池(Buffer Pool):InnoDB 通过缓存数据页的方式,减少磁盘 I/O 操作。修改操作首先会被写入缓冲池,随后异步地刷新到磁盘。
- 双写缓冲(Doublewrite Buffer):为了防止在崩溃或断电时数据部分写入磁盘导致的损坏,InnoDB 将数据页写入两次,确保数据完整。
2. MyISAM 存储引擎
主要特点:
- 不支持事务:MyISAM 不支持事务和外键,因此不能保证数据的完整性和一致性。
- 表级锁定:MyISAM 使用表级锁定(Table-level Locking),对于读操作锁定整个表,写操作也是如此。这使得 MyISAM 的并发性能较差,尤其是在频繁写入的场景。
- 全文索引支持:MyISAM 支持全文索引(Full-text Index),可以用于高效的全文搜索操作。
- 较小的存储空间:MyISAM 的存储格式紧凑,对于存储静态数据或日志数据有一定的优势。
- 速度快:由于其不需要事务控制、外键支持等功能,MyISAM 在只读或读多写少的场景下性能非常好。
适用场景:
- 只读数据库:用于静态数据存储,且更新频率低的场景。例如,数据仓库 或 日志存储系统。
- 全文搜索:需要对文本进行快速全文搜索的场景。
工作机制(底层实现):
- 数据和索引分离存储:MyISAM 将数据存储在
.MYD
文件中,索引存储在.MYI
文件中。 - 表锁机制:对于 MyISAM,读取操作可以并发进行,但一旦有写操作,整个表会被锁定。写入时会阻塞所有其他的读操作。
- 不支持崩溃恢复:与 InnoDB 不同,MyISAM 不支持崩溃恢复,一旦系统崩溃可能导致数据丢失或不一致。
3. Memory 存储引擎
主要特点:
- 数据存储在内存中:Memory 存储引擎的数据是临时存储在内存中的,重启数据库或关闭会话后,所有数据都会丢失。
- 表级锁定:和 MyISAM 一样,Memory 引擎使用表级锁定。
- 速度快:由于数据完全存储在内存中,Memory 引擎的读写速度非常快。
- 不支持 BLOB 和 TEXT 类型:由于内存的限制,Memory 引擎不支持大对象类型,如 BLOB 和 TEXT 类型。
适用场景:
- 临时数据处理:Memory 引擎适合用于临时数据处理、缓存数据等。例如,临时表 或 会话数据存储。
- 快速查询结果存储:需要高效快速查询但不需要持久化的场景。
工作机制(底层实现):
- 内存存储结构:Memory 引擎将数据存储在内存中,使用哈希索引(Hash Index),以提供更快速的查询性能。
- 数据丢失风险:由于数据存储在内存中,一旦服务器重启或关闭,所有数据都会消失。
4. CSV 存储引擎
主要特点:
- 文本存储:CSV 引擎将数据存储为逗号分隔值的文本文件,类似于传统的 CSV 文件。
- 简单结构:每张表的数据都会被存储在一个
.csv
文件中。 - 不支持索引:CSV 引擎不支持索引,因此查询性能较差。
- 便于导入和导出:由于其存储格式是标准的 CSV 文件,便于与外部系统进行数据交换。
适用场景:
- 数据导入和导出:在需要与其他系统交换数据时,CSV 存储引擎是一个很好的选择。
- 临时数据存储:对于需要简单格式且不需要索引的数据存储场景,可以使用 CSV。
5. Archive 存储引擎
主要特点:
- 适合大规模数据存储:Archive 存储引擎专门设计用于高效地存储大量的历史数据或归档数据。
- 支持插入和查询:Archive 只支持插入操作和查询操作,不支持更新和删除操作。
- 数据压缩:Archive 引擎会将数据进行压缩存储,从而减少磁盘占用。
- 表级锁定:Archive 使用表级锁定。
适用场景:
- 日志系统:Archive 存储引擎非常适合存储日志数据,历史归档数据等,数据存储空间有限的场景。
6. 其他存储引擎
- Merge:合并多个 MyISAM 表,可以将多个相同结构的 MyISAM 表合并为一个逻辑表,常用于分区数据管理。
- Federated:用于分布式数据库系统,可以在不同 MySQL 实例之间进行跨服务器查询。
- NDB Cluster:用于 MySQL Cluster 配置,分布式、容错的存储引擎,常用于高可用系统。
总结
存储引擎 | 主要特点 | 适用场景 |
---|---|---|
InnoDB | 支持事务、行级锁定、外键支持 | 高并发事务系统(如银行、电子商务平台) |
MyISAM | 不支持事务、表级锁定、全文索引支持 | 静态数据存储、读多写少的系统 |
Memory | 数据存储在内存中,速度快 | 临时数据处理、缓存、会话管理 |
CSV | 数据存储为文本文件,便于数据交换 | 数据导入导出场景 |
Archive | 只支持插入和查询,数据压缩 | 日志数据存储、大规模历史数据归档 |
Merge | 合并多个 MyISAM 表 | 分区数据管理 |
Federated | 分布式数据库系统,跨服务器查询 | 需要与其他 MySQL 实例交互的系统 |
一文彻底弄懂MySQL的各个存储引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB的更多相关文章
- [转帖]一文看懂mysql数据库本质及存储引擎innodb+myisam
一文看懂mysql数据库本质及存储引擎innodb+myisam https://www.toutiao.com/i6740201316745740807/ 原创 波波说运维 2019-09-29 0 ...
- mysql 流程函数 存储引擎 InnoDB简单特性
建表及插入数据语句: mysql> create table salary(userid int,salary decimal(9,2)); Query OK, 0 rows affected ...
- MySQL存储引擎 InnoDB/ MyISAM/ MERGE/ BDB 的区别
MyISAM:默认的MySQL插件式存储引擎,它是在Web.数据仓储和其他应用环境下最常使用的存储引擎之一.注意,通过更改 STORAGE_ENGINE 配置变量,能够方便地更改MySQL服务器的默认 ...
- 浅谈MySQL存储引擎-InnoDB&MyISAM
存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的.每一种存储引擎都有它的优势和劣势,本文只讨论最常见 ...
- mysql常用的存储引擎,MyISAM和InnoDB的对比
Mysql有多种存储引擎,最常用的有MyISAM和InnoDB这两种,每一种类型的存储引擎都有自已的特点,可以结合项目中数据的使用场景来进行了哪种存储引擎合适. 1:查看mysql数据库支持的存储引擎 ...
- MySQL两大存储引擎:MyISAM和InnoDB
Mysql有两大常用的存储引擎MyISAM,InnoDB,默认的形式是前者. 两者基本的差别是对事务处理.外键和行级锁的主持上,InnoDB支持事务处理.外键等高级特性,而MyISAM不支持.MyIS ...
- MySQL两大存储引擎InnoDB与MyISAM
1.InnoDB存储引擎 MySQL5.5中InnoDB成为默认的存储引擎.InnoDB是事务型存储引擎,被设计用来处理大量的短期事务.它的性能和自动崩溃恢复特性,使得它在非事务场景中也很流行. 所以 ...
- MySQL支持多种存储引擎
MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...
- 百万年薪python之路 -- MySQL数据库之 存储引擎
MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 首先声明一点: 存储引擎这个概念只有MySQL才有. ...
- MySQL的多存储引擎架构
支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一.如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构.本文将 ...
随机推荐
- @RequestBody中传递json里的对象,对象包含list属性,对应body里的格式
以下就是对应格式,直接复制进接口文档相关工具即可{ "userId": "88", "openCostCenterDTO": [ { &qu ...
- 新版的Django Docker部署方案,多阶段构建、自动处理前端依赖
前言 前几天的文章中,我们已经把使用 pdm 的项目用 docker 搞定了,那么下一步就是把完整的 DjangoStarter v3 版本用 docker 部署. 现在不像之前那么简单直接一把梭了, ...
- Next.js 中为什么 App Router 可能是未来,但 Pages Router 仍然重要?
Next.js 作为一个强大的 React 框架,为开发者提供了两种路由系统:App Router 和 Pages Router.这两种路由系统各有特色,适用于不同的场景.本文将深入探讨这两种路由系统 ...
- 闲鱼卖2000元的带腾讯备案的 gaapqcloud.com.cn 域名低成本获取方法!
最近在闲鱼看到有人卖域名,声称是腾讯的备案,还卖1000多元!逆天了!这个信息差是真能割韭菜,我一查,这不就是腾讯云的全球应用加速域名吗?????这样也能赚到钱?? 获取方法 进入腾讯云全球应用加速 ...
- win10缺少SNMP服务解决办法
一,以管理员的身份启动Powershell 第一步在win10系统任务栏上,点击搜索图标,输入"PowerShell",如下图所示: 2 第二步搜索到PowerShell之后,鼠标 ...
- HLK-RM60 + openwrt调试
1. 简介 HLK-RM60官网 https://www.hlktech.com/en/Goods-176.html 采用联发科SOC, MT7621/MT7905/MT7975 实际上采购的是MT7 ...
- Java 读取命令行输入
在 Java 中,您可以使用 Scanner 类从命令行读取输入.这个类属于 java.util 包,因此在使用之前您需要导入该包. 下面是一个如何从命令行读取输入的 Java 程序示例: impor ...
- 【Jmeter】之进行单接口批量压力测试
目录: 一.安装Jmeter 二.接口压力测试 p.p1 { margin: 0; font: 14px ".PingFang SC"; color: rgba(17, 31, 4 ...
- Docker学习系列3:常用命令之容器命令
本文是Docker学习系列教程中的第三篇.前几篇教程如下: 「图文教程」Windows11下安装Docker Desktop 「填坑」在windows系统下安装Docker Desktop后迁移镜像位 ...
- Go plan9 汇编:说透函数栈
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 函数是 Go 的一级公民,本文从汇编角度出发看看我们常用的一些函数在干什么. 1. 函数 1.1 main 函数 在 main 函数中计算两数之 ...