MySQL 的存储引擎有哪些?它们之间有什么区别?
MySQL 的存储引擎及其区别
MySQL 提供多种存储引擎,不同存储引擎在数据存储方式、索引支持、事务处理等方面各具特点。以下列出常用的存储引擎及其主要区别。
1. 常见存储引擎
(1)InnoDB
- 特点:
- 默认存储引擎,支持事务(ACID)。
- 使用 聚簇索引,主键数据和索引存储在一起。
- 支持外键约束。
- 采用 MVCC(多版本并发控制)提高并发性能。
- 适用场景:
- 需要事务支持的场景,如银行系统、电商系统。
- 大量数据的读写操作。
(2)MyISAM
- 特点:
- 不支持事务和外键。
- 采用非聚簇索引,数据和索引分开存储。
- 支持全文索引。
- 表级锁,写操作会阻塞其他读写操作。
- 适用场景:
- 以读操作为主的场景,如日志分析、数据仓库。
- 数据不需要频繁更新。
(3)Memory
- 特点:
- 数据存储在内存中,读写速度快。
- 数据非持久化,MySQL 重启或崩溃后数据丢失。
- 支持表级锁。
- 适用场景:
- 临时数据存储或需要极高读写速度的场景,如缓存系统。
(4)CSV
- 特点:
- 数据以逗号分隔值文件(CSV)格式存储。
- 不支持索引。
- 性能较低。
- 适用场景:
- 数据导入导出操作。
(5)Archive
- 特点:
- 专为存储归档数据设计,支持高压缩比。
- 仅支持 INSERT 和 SELECT 操作,不支持索引和事务。
- 适用场景:
- 只需存储大量历史归档数据,几乎不需要更新。
(6)Federated
- 特点:
- 用于访问远程 MySQL 服务器的数据。
- 数据存储在远程服务器上。
- 适用场景:
- 需要整合多个 MySQL 数据库的数据。
(7)NDB(Clustered Storage Engine)
- 特点:
- 用于 MySQL 集群,支持高可用性和高并发。
- 数据分布式存储在多个节点。
- 适用场景:
- 高可用、高性能需求的分布式场景。
2. 存储引擎之间的区别
| 存储引擎 | 事务支持 | 锁机制 | 索引方式 | 全文索引 | 外键支持 | 数据持久化 | 适用场景 |
|---|---|---|---|---|---|---|---|
| InnoDB | 支持 | 行级锁 | 聚簇索引 | 不支持 | 支持 | 支持 | 高并发、事务处理 |
| MyISAM | 不支持 | 表级锁 | 非聚簇索引 | 支持 | 不支持 | 支持 | 以读为主的应用 |
| Memory | 不支持 | 表级锁 | 非聚簇索引 | 不支持 | 不支持 | 不支持 | 缓存、临时数据存储 |
| CSV | 不支持 | 无 | 无 | 不支持 | 不支持 | 支持 | 数据导入导出 |
| Archive | 不支持 | 行级锁 | 无 | 不支持 | 不支持 | 支持 | 大量归档数据存储 |
| Federated | 不支持 | 无 | 无 | 不支持 | 不支持 | 不支持 | 跨服务器数据访问 |
| NDB | 支持 | 行级锁 | 非聚簇索引 | 不支持 | 不支持 | 支持 | 分布式、高并发、高可用性场景 |
3. 存储引擎的选择建议
选择存储引擎时需考虑以下因素:
事务需求:
- 需要事务:选择 InnoDB。
- 不需要事务:可选择 MyISAM、Memory 等。
数据访问模式:
- 读写并发:选择 InnoDB。
- 只读或读多写少:可选择 MyISAM。
持久化需求:
- 持久化:InnoDB、MyISAM。
- 非持久化:Memory。
数据规模和性能:
- 数据量大,索引优化重要:选择 InnoDB。
- 极高性能,数据可以丢失:选择 Memory。
4. 总结
- MySQL 提供了多种存储引擎以满足不同的需求。
- InnoDB 是大多数场景下的首选,因其支持事务、高并发和外键。
- 其他存储引擎(如 MyISAM、Memory)则适用于特定的场景。
根据业务需求和数据特性选择合适的存储引擎,是设计高效数据库的关键。
MySQL 的存储引擎有哪些?它们之间有什么区别?的更多相关文章
- MySQL常用存储引擎及如何选择
一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...
- mysql之存储引擎和文件配置
(查看系统服务,在运行里输入services.msc) 补充:将mysql做成系统服务:mysqld --install 取消:mysqld --romove 在服务中可以直接鼠标操作mysql服务的 ...
- MySQL-TokuDB:MySQL 高性能存储引擎:TokuDB
ylbtech-MySQL-TokuDB:MySQL 高性能存储引擎:TokuDB 1.返回顶部 1. 在安装MariaDB的时候了解到代替InnoDB的TokuDB,看简介非常的棒,这里对ToduD ...
- [转帖]mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择
mysql常用存储引擎(InnoDB.MyISAM.MEMORY.MERGE.ARCHIVE)介绍与如何选择原创web洋仔 发布于2018-06-28 15:58:34 阅读数 1063 收藏展开 h ...
- 面试官:你用过mysql哪些存储引擎,请分别展开介绍一下
这是高级开发者面试时经常被问的问题.实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过 ...
- MySQL InnoDB存储引擎体系架构 —— 索引高级
转载地址:https://mp.weixin.qq.com/s/HNnzAgUtBoDhhJpsA0fjKQ 世界上只两件东西能震撼人们的心灵:一件是我们心中崇高的道德标准:另一件是我们头顶上灿烂的星 ...
- Mysql基础(二):MySQL之存储引擎
目录 MySQL之存储引擎 1.MySQL存储引擎介绍 2.MySQL结构 3.MySQL存储引擎分类 4.存储引擎的使用 5.总结 MySQL之存储引擎 1.MySQL存储引擎介绍 MySQL中的数 ...
- MySQL之四 存储引擎
1.介绍 存储引擎MySQL中的"文件系统" MySQL体系结构 InnoDB存储引擎介绍 My1SAM 和InnoDB区别 mysql MariaDB [(none)]> ...
- 深入解读MySQL InnoDB存储引擎Update语句执行过程
参考b站up 戌米的论文笔记 https://www.bilibili.com/video/BV1Tv4y1o7tA/ 书籍<mysql是怎样运行的> 极客时间<mysql实战45讲 ...
- MYSQL的存储引擎一般只要哪些?
根据个人个人见解: MySQL的存储引擎(构成.安全.锁) Myisam:数据操作快速的一种引擎,支持全文检索.文件保存在数据库名称为目录名的 目录中,有3个文件,分别是表定义文件(.frm).数据文 ...
随机推荐
- ctfshow--web3 incluede伪协议注入
这题一看就知道是个伪协议的题 直接用data伪协议 ls 查看目录 data://text/plainy, 再cat 一下就拿到flag了
- HTTPS 证书自动化运维:基础知识与重要性
简介: 随着互联网的飞速发展和网络安全威胁的日益增多,HTTPS(HyperText Transfer Protocol Secure)已经成为保护网站和用户数据安全的标准协议.HTTPS 证书的管理 ...
- 实“智”名归!天翼云论文被国际顶会IEEE CVPR收录!
近日,由天翼云弹性网络产品线撰写的<Small Scale Data-free Knowledge Distillation>长文被IEEE Conference on Computer ...
- Nginx的HTTP模块与Stream模块:区别与应用场景
本文分享自天翼云开发者社区<Nginx的HTTP模块与Stream模块:区别与应用场景>,作者:云海 Nginx是一个多功能的开源Web服务器,它支持多个模块,其中两个重要的模块是HTTP ...
- 1.6~THUWC 的总结
THUWC 虽然拿到了一等奖,但是其实不如预期的发挥. Day1 获得 260~300 分.快速地想出了 T1T2 然后在调试上花费了很多的时间,T3 没有想出来,T4 想出了 \(O(n\log^3 ...
- mybatis之xml简单映射,解决实体类属性字段与数据库表字段不一致问题
当实体类属性字段与数据库表字段不一致时该怎么办? 方法一:起别名 <select id="getUserList" resultType="RealUser&quo ...
- java http协议,添加header以及post传参,以及服务端获取
一.客户端请求 public static String test(){ JSONObject obj = new JSONObject(); obj.put("cusName", ...
- QT5笔记: 28. SplashWindow 没听懂,无内容
没有说明这个SplashWindow咋用 大概小人愚笨 this->setWindowFlag(Qt::SplashScreen);莫非是这个?
- QT5笔记: 26. 多窗体应用程序设计
- 【忍者算法】从快慢指针到倒数查找:优雅解决链表倒数问题|LeetCode第19题"删除链表的倒数第N个结点"
从快慢指针到倒数查找:优雅解决链表倒数问题 从生活场景说起 想象你在一个漫长的队伍中,想知道自己距离队尾还有多少人.一个巧妙的方法是:让你的朋友从你所在位置往后数N步,然后你和朋友一起向后走.当朋友走 ...