企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## InnoDB存储引擎 InnoDB存储引擎支持事务,其设计目标主要面向在线事务处理(OLTP)的应用. 其特点十行锁设计、支持危机,并支持类型与Oracle的非锁定读,即默认读取操作不会产生锁。 InnoDB通过使用多版本并发控制(MVCC) 来获取高并发性,并且实现了SQL标准的4种隔离,默认为REPEATABLE级别。同时使用一种被称为next-keylocking的策略来避免幻读(phantom)现象的产生。 除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、InnoDB存储的锁信息(lock info)、数据字典信息(data dictionary)等高性能和高可用的功能。 对于表中数据的存储, InnoDB存储引擎采用了聚集(slustered)的方式,因此每张表的存储都是按主键的顺序存放。如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的ROWID,并以此为主键。 * * * * * ## MyISAM存储引擎 MyISAM存储引擎**不支持事务**、表锁设计,支持全文索引,主要面向一些OLAP数据库应用。 MyISAM存储引擎另一个与众不同的地方是它的缓冲池只缓存(cache)索引文件,而不缓冲数据文件。 MyISAM存储引擎表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。 可以通过myisampack工具来进一步压缩数据文件(采用赫夫曼【Huffman】)编码静态算法来压缩数据,因此压缩之后的数据表示只读的, 也可以通过该工具解压数据文件。 从5.0版本之前 默认支持表大小为4GB,5.0开始默认支持256TB的单表数据。 ![](https://box.kancloud.cn/60fa1ffe5398915c0c285f9995a289b7_660x154.png) * * * * * ## NDB存储引擎 NDB存储引擎是一个集群存储引擎,类似于Oracle 的RAC集群,不过与其架构不同的是,其结构是share nothing 的集群架构,因此能提供更高的可用性。NDB的特点是数据全部放在内存中(mysql 5.1版本开始,可以将非索引数据放在磁盘上),因此主键查找速度极快,并且通过添加NDB数据存储节点(Data Node)可以线性地提高数据库性能,是高可用、高性能的集群系统。 注意:NDB存储引擎的连接操作(JOIN)是在MySQL数据库层完成的 ,而不是在存储引擎层完成的。 这意味着,复杂的挎包和操作需要巨大的网络开销,因此查询速度很慢。 ![](https://box.kancloud.cn/bb02d55f8298c9ddcf9b31c23e018aee_654x108.png) ***** ## Memory存储引擎 Memory存储引擎(之前称为HEAP存储引擎)将表中的数据存放在内存中,如果数据重启或者发生崩溃,表中的数据将不在 所以适合用于存储临时数据的临时表,以及数据仓库的纬度表。 Memory存储引擎默认使用哈希索引,而不是我们熟悉的B+树状索引。 Memory存储引擎速度非常快,但是也有一定的限制。比如:只支持表锁,并发性能差。并且不支持TEXT和BLOB列类型。最重要的是,存储变长字段(varchar)时是按照定常字段(char)的方式进行的,因此会浪费内存(已经给出了patch解决方案)。 MySQL数据库使用Memory存储引擎作为临时表存放查询中间的结果集。 如果中间结果集大于Memory存储引擎表的容量设置,或者含有TEXT或BLOB列类型字段,则MySQL数据库会转换成MyISAM存储引擎表而存放到磁盘。因为MyISAM不缓存数据文件,所以这是产生的临时表的性能对于查询会有损失。 ***** ## Archive存储引擎 Archive存储引擎只支持INSERT 和 SELECT 操作, MySQL5.1版本支持索引。 Archive存储引擎使用zlib算法将数据行进行压缩 压缩比一般可达1:10。可以用来做日志信息。 Archive存储引擎使用行锁来实现高并发的插入操作,但是其本身不是书屋安全的存储引擎,其设计目标主要是提供高数的插入和压缩功能。 ***** ## Federated 存储引擎 Federated 存储引擎表并不存放数据,它只是指向一台远程MySQL数据库服务器上的表。这非常类似于SQL Server 的链接服务器和Oracle的透明网关,不同的是,当前Federated存储引擎只支持MySQL数据库表,不支持异构数据库表。 ***** ## Maria存储引擎 Maria存储引擎 是新开发订单引擎,设计目标主要是取代MyISAM存储引擎,从而成为MySQL的默认存储引擎。 特点:注册缓存数据和索引文件,应用了行锁设计,提供了MVCC功能,支持事务和非事务安全的选项,以及更好的BLOB字符类型的处理性能。 ***** ## 其他存储引擎 如:Merge、CSV、Sphinx和Infobright等。 不同之处:存储容量的限制、事务支持、锁的粒度、MVCC支持、支持的索引、备份和复制等。 ![](https://box.kancloud.cn/67c9fd3b0f58f5d7b83140026b5c9c21_836x582.png) 通过`show engines\G`查找information_schema架构下的ENGINES表。 ![](https://box.kancloud.cn/3fa65c917f8888c4bc2c9e4db73d2944_609x529.png) 可以通过更换存储引擎来区分表的大小: MyISAM引擎表大小为:40.7MB, InnoDB引擎表大小为:113.6MB, Archive引擎表大小为:20.2MB ![](https://box.kancloud.cn/0901aa7283af8afeea531c0a768be12c_882x279.png)