MySQL作为世界上流行的数据库,在许多中小型项目中使用,但是您对MySQL数据库的存储引擎了解多少?
我们将逻辑表中的数据存储到数据库中,数据库又将表中的数据存储到物理设备(例如磁盘、内存)中数据是如何存储在物理设备上的?如何创建索引?如何添加或删除此支票?数据在物理设备(或类型和服务)上存储和操作的方式称为数据库引擎。
例如,在赛车比赛中,如果车手根据不同的比赛地形选择合适的赛车引擎,赛车可以跑得更快。MySQL数据库支持插件存储引擎,可以轻松替换不同的数据库引擎。相比之下,赛车手更换发动机就不那么方便了。MySQL数据库的逻辑架构图如下。可以看出,存储引擎位于MySQL数据库系统的底部。
使用显示引擎在命令行上查看MySQL数据库引擎。从下图可以看出,MySQL的默认数据库引擎是InnoDB(MySQL这里是社区版本5.7,请忽略背景中的小妹,手工搞笑~)
我将在下面逐一介绍这些数据库引擎
InnoDB引擎:
自MySQL5.6以来,InnoDB一直是MySQL的默认存储引擎,以前是MyISAM引擎
InnoDB支持事务,支持外键,支持自动灾难恢复,使用行锁支持高并发读取,支持热备份和崩溃后快速恢复,支持全文检索(仅在5.6.4版中支持,因此由于时间原因,有些问题可能不太严格),并有自己的读写缓存管理机制,即缓存索引也缓存数据,不支持压缩(将来可能支持)
使用InnoDB引擎创建表,这些表将生成frm文件和idb文件、frm文件中存储表的定义以及idb文件中存储表的数据和索引
一般来说,InnoDB是大多数情况下的好选择,可以满足大多数需求,这就是为什么它被称为MySQL5.6之后的默认数据库引擎
内存引擎:
内存不支持事务,不支持崩溃后的快速恢复,使用不适合高并发的表锁,追求性能,依赖操作系统管理读写缓存,只缓存索引而不缓存实际数据,并支持压缩
使用MyISAM引擎创建表,该表将生成frm文件、MYD文件和MYI文件。frm文件存储表的定义,MYD文件存储表的数据,MYI文件存储表的索引
因为MyISAM引擎不支持事务处理,这意味着当有事务需求时不能使用MyISAM存储引擎MyISAM追求性能,适合插入和读取操作。
RG _ MyISAM(合并)引擎:
RG _ MyISAM引擎是一组MyISAM表的组合,在MySQL5.7之前称为MEGER
使用MEG_MyISAM引擎创建一个表,该表生成frm文件和MRG文件,存储表的定义在frm文件中,并且MEG文件存储表的数据
MEG_MyISAM引擎要求主表MERGE和子表具有完全相同的数据结构(属性、数据类型、索引)对于存储策略,它被分为多个表,如日志表。根据一年中12个月的划分,需要12个定义完全相同的数据表。当通过组合多个月的表来查询数据时,需要编写多个表的连接。此时,使用MEG_MyISAM引擎只需要像查询一个表一样进行查询,因此数据操作变得简单。
内存引擎:
内存速度快,数据直接存储在内存中
使用memory引擎创建表,将只生成frm文件,因为表的数据临时存储在MEMORY中
MEMORY追求速度。为了获得更快的响应时间,速度比磁盘快得多的存储器被用作存储介质,并且可以用作临时表但是,因为数据存储在内存中,所以表中的数据需要立即使用,否则,当MySQL守护进程崩溃时,表中的数据将会丢失
CSV引擎:
使用CSV引擎创建表,该表将生成frm文件、CSV文件和CSM文件、frm文件中存储表的定义、CSV文件中存储表的数据、CSM文件中存储表的元信息(例如数据表的当前状态、数据表中的数据量)由
生成的数据文件可以直接在办公环境下用Excel打开,但需要注意的是文件已经损坏。如有必要,可以使用命令检查表和修复表来检查和恢复该表。
BLACKHOLE引擎:
BLACKHOLE就像它的名字一样,不会保存任何插入的数据,表总是空的,任何写入的数据都会消失,就像一个黑洞,可以吃掉所有的数据
使用BLACKHOME引擎创建表,只生成frm文件,表的定义存储在frm文件中。因为任何写入的数据都不会被保存,所以没有用于存储表数据的文件。
BLACKHOLE不保存数据,因此数据表可用作演示。任何添加、删除、修改和检查最终都不会在表中留下数据。
性能_模式引擎:
此引擎用于收集与数据库性能相关的参数。这是MySQL的性能模式,主要关注性能数据用户不能直接创建存储引擎为PERFORMANCE_SCHEMA的表
ARCHIVE引擎:
arichiv支持数据压缩,并支持插入和查询操作两种功能
使用ARCHIVE引擎创建表,该表将生成frm文件和ARZ文件、frm文件中存储表的定义以及ARZ文件中表的压缩数据和索引
扩展引擎:
支持代理查询,即创建一个远程MySQL客户端连接,将要查询的语句传输到远程服务器执行,并完成数据访问
从上图可以看出,社区版本中的MySQL不支持FEDERATED引擎。
除了上述数据库引擎之外,您还可以使用自己开发的数据库引擎。MySQL提供了良好的可扩展性
可以根据自己的需要使用数据库引擎来充分发挥数据库的性能,满足实际需要。在选择MySQL数据库引擎之前,您应该考虑以下问题
.1。您需要支持交易吗?
.2。你需要热备份吗?
.3,有必要急着回去崩溃吗?
.4。您需要外键支持吗?
.5,存储限制?
.6,支持索引和缓存?
还提供了各种引擎的查找表供您查看。一般来说,InnoDB是一个黄金选择,InnoDB和MyISAM引擎是最常用的。