MySQL的存储引擎:

目录

InooDB引擎:

MyISAM引擎:

InooDB引擎与MyISAM存储引擎的区别:

Archive引擎:

Blackhole引擎:

CSV引擎:

Memory引擎:

Federated引擎:

Merge引擎:

NDB引擎:


InooDB引擎:

具备外键支持功能的事务存储引擎。

InooDB是MySQL的默认事务性引擎,被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(commit)和回滚(rollback)。除了增加和查询外,还需要更新、删除,优先选择InooDB存储引擎。支持行级锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作。

InooDB读写操作的处理效率差一些,对内存要求较高。

MyISAM引擎:

主要的非事务处理存储引擎。提供了大量的特性,包括全文索引、压缩、空间函数等。访问速度快,对事物完整性没有要求或者以SELECT、INSERT为主的应用。针对数据统计有额外的常数存储,所以COUNT(*)查询效率很高。只读应用或者以读为主的,优先选择MyISAM存储引擎。

不支持事务、行级锁、外键,崩溃后无法安全恢复。表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作。

InooDB引擎与MyISAM存储引擎的区别:

InooDB提供了良好的事务管理、崩溃修复能力和并发控制。因为InooDB支持事务,所以对于要求事务完整性的场合需选择InooDB。缺点是读写效率稍差,占用的数据空间相对比较大。

MyISAM提供了大量的特性,但是不支持事务、外键,崩溃后无法安全恢复。以读操作和插入操作为主,只有很少的更新、删除操作,并且对事物的要求没那么高,就可以选择MyISAM存储引擎。优点是占用空间小,处理速度快。缺点是不支持事物的完整性和并发性。

对比MyISAM的存储引擎,InooDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。

MyISAM只缓存索引,不缓存真实数据,InooDB不仅缓存索引还要缓存真实数据,对内存的要求较高,而且内存大小对性能有决定性的影响。

Archive引擎:

用于数据存档。仅支持插入和查询两种功能(行被插入后不能再修改)。

MySQL5.5以后支持索引功能。

拥有很好的压缩机制,使用zlib库,在记录请求时实时的进行压缩,经常被用来作为仓库使用。

创建ARCHINE表时,存储引擎会创建名称以表名开头的文件。数据文件的扩展名为.ARZ。

同样的数据量下,比MyISAM表要小大约75%,比InnoDB表小大约83%。

采用了行级锁。该ARCHIVE引擎支持auto_increment列属性,auto_increment列可以具有唯一索引或者非唯一索引。在其他列创建索引会导致错误。

适合日志和数据采集应用,适合存储大量的独立的作为历史记录的数据,拥有很高的插入速度,但是对查询的支持较差。

Blackhole引擎:

丢弃写操作,读操作会返回空内容。

Blackhole引擎没有实现任何存储机制,会丢弃所有插入的数据,不做任何保存。但是服务器会记录Blackhole表的日志,所以可以用于赋值数据到备库,或者简单地记录到日志,但是有很多问题。

CSV引擎:

存储数据时,以逗号分隔各个数据项。

CSV引擎可以将普通的CSV文件作为MySQL的表来处理,但不支持索引。可以作为一种数据交换的机制。存储的数据直接可以在操作系统里,用文本编译器,或者excel读取。对于数据的快速导入、导出是有明显优势的。

创建CSV表时,服务器会创建一个纯文本数据文件,其名称以表名开头并带有.CSV扩展名,将数据存储到表中时,存储引擎将其以逗号分隔值格式保存到数据文件中。

Memory引擎:

Memory采用的逻辑时内存,响应速度快,但是当进程崩溃时数据会丢失。要求存储的数据是数据长度不变的格式。

Memory同时支持哈希索引和B+数索引。至少比MyISAM表要快一个数量级。表的大小是受到限制的,主要取决于两个参数,分别是max_rows和max_heap_table_size。

数据文件与索引文件分开存储。每个基于Memory存储引擎的表实际对应一个磁盘文件,文件名与表明相同,类型为frm类型,该文件中只存储表的结构,数据文件都是存储在内存中的。有利于数据的快速处理,提高整个表的处理效率。

缺点是:数据易丢失,生命周期短。

适用场景:

目标数据比较小,而且频繁的进行访问。在内存中存放数据,如果太大会造成内存溢出,可以控制max_heap_table_size控制Memory表的大小。如果数据是临时的,必须立即可用得到,那么可以放在内存中。存储的数据突然间丢失也没有太大关系。

Federated引擎:

访问远程表。

Federated引擎是访问其他的MySQL服务器的一个代理,提供了一种很好的跨服务器的灵活性,但是有很多问题。因此默认是禁用的。

Merge引擎:

管理多个MyISAM表构成的表集合。

NDB引擎:

MySQL集群专用存储引擎。

NDB引擎主要用于MySQL Cluster分布式集群环境。

相关推荐
TDengine (老段)39 分钟前
连接 TDengine 遇到报错 “failed to connect to server, reason: Connection refused” 怎么办?
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
李慕婉学姐2 小时前
Springboot黄河文化科普网站5q37v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
Cabbage_acmer2 小时前
MySQL期中考试突击!
数据库·mysql
Lu Yao_2 小时前
Redis 缓存
数据库·redis·缓存
小桥流水人家哇3 小时前
性能测试单场景测试时,是设置并发读多个文件,还是设置不同的用户读不同的文件?
数据库·性能测试技巧
表示这么伤脑筋的题我不会3 小时前
Oracle 21C 部署ogg踩过的坑
数据库·oracle
你不是我我3 小时前
【Java 开发日记】MySQL 与 Redis 如何保证双写一致性?
数据库·redis·缓存
望获linux3 小时前
【实时Linux实战系列】实时 Linux 在边缘计算网关中的应用
java·linux·服务器·前端·数据库·操作系统
fredinators3 小时前
数据库专家
大数据·数据库
fredinators4 小时前
数据库flask访问
数据库·oracle·flask