7.数据库存储引擎

予早 2024-10-21 14:13:10
Categories: Tags:

image-20241021140657603

在MySQL中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。Support列的值表示某种引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的存储引擎 。

MySQL8.x支持InnoDB、MyISAM、MEMORY、PERFORMANCE_SCHEMA、MRG_MYISAM、BLACKHOLE、CSV、ARCHIVE八种数据库引擎。其中,常见的是MyIASM和InnoDB引擎,且仅有InnoDB支持事务、分布式锁和保存点。MySQL5.5及以后以InnoDB作为默认存储引擎。

InnoDB

InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 5.5.5之后,InnoDB作为默认存储引擎,主要特性如下:

  1. InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表与其他MySQL表的类型混合起来,甚至在同一个查询中也可以混合。
  2. InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。
  3. InnoDB存储引擎完全与MySQL服务器整合,为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引存在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘分区)。这与MyISAM表不同,比如在MyISAM表中每个表被存在分离的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
  4. InnoDB支持外键完整性约束(FOREIGN KEY)。存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6B的ROWID,并以此作为主键。
  5. InnoDB被用在众多需要高性能的大型数据库站点上。InnoDB不创建目录,使用InnoDB时,MySQL将在数据目录下创建一个名为ibdata1的10MB大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件。

MVCC,多版本并发控制,是InnoDB实现的一种一致性非锁定读的方法

因为锁的是原子操作,而mysql的事务是原子操作

对于mysql而言

读事务-读事务

读事务-写事务

写事务-写事务

MyISAM

ISAM, Indexed Sequential Access Method,索引顺序存取方法

MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务。MyISAM的主要特性如下:

  1. 在支持大文件(达63位文件长度)的文件系统和操作系统上被支持。
  2. 当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块以及若下一个块被删除则扩展到下一块来自动完成。
  3. 每个MyISAM表最大的索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16个。
  4. 最大的键长度是1000B,这也可以通过编译来改变。对于键长度超过250B的情况,一个超过1024B的键将被用上。
  5. BLOB和TEXT列可以被索引。
  6. NULL值被允许在索引的列中,这个值占每个键的0~1个字节。
  7. 所有数字键值以高字节优先被存储,以允许一个更高的索引压缩。
  8. 每个表一个AUTO_INCREMENT列的内部处理。MyISAM为INSERT和UPDATE操作自动更新这一列,这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。
  9. 可以把数据文件和索引文件放在不同目录。
  10. 每个字符列可以有不同的字符集。
  11. 有VARCHAR的表可以固定或动态记录长度。
  12. VARCHAR和CHAR列可以多达64KB。

MRG_MYISAM

MySQL的Merge引擎(MRG_MyISAM)是一种特殊的存储引擎,它允许将多个结构相同的MyISAM表组合成一个逻辑上的表。这种合并提供了高效的查询性能,因为查询时会同时从所有子表中获取数据,结果集就像是从单个表中获取的一样。Merge引擎主要用于处理大规模的数据整合,如分区或分片,以提高查询速度和并发性能。

相当于在MyIASM基础上增加了水平分片功能。

MEMORY

MEMORY存储引擎将数据存储在内存中,使用哈希进行索引,访问速度快,通常用于临时表及缓存。缺点就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保重数据的安全性。

PERFORMANCE_SCHEMA

BLACKHOLE

BLACKHOLE存储引擎中的任何写入均会丢失,不会实际存储,select也不会查到数据,但会记录日志。

由于BLACKHOLE不记录数据但记录日志的特性,可以基于该引擎充当日志中继。通常一主多从中从节点要从主节点同步数据,当从节点较多时会给主节点带来较大压力,这时可以起一个中继节点,中继节点使用BLACKHOLE,从节点从中继节点获取日志从而同步数据。

CSV

CSV存储引擎将数据存储在CSV格式的文件中,这些文件可以直接用文本编辑器打开,也可以被大多数的表格软件如Microsoft Excel读取。当你使用CSV存储引擎创建一个表时,MySQL会为这个表创建两个文件:一个是数据文件(.CSV扩展名),另一个是元数据文件(.CSM扩展名)。数据文件包含表中的数据,而元数据文件存储了表的结构和行数信息。

ARCHIVE

这个引擎只允许插入和查询,不允许修改和删除。相当于拥有只读权限和写入权限,没有修改权限和删除权限,用于归档文件,有着较高的压缩比。