MySQL 存储引擎

时间:2022-06-05 22:09:27

MySQL的基本架构:

MySQL 存储引擎

 

 MySQL大致可以分为Server层和存储引擎层两部分

  Server层包括:连接器,分析器,优化器,执行器。

  存储引擎架构模式是插件式的,支持InnoDB,MyISAM,Memory等。可以使用show table status查看表的相关信息。

 

InnoDB引擎:

MySQL的默认事务性引擎,也是最常用的存储引擎。

主要特性:

  1.InnoDB支持行锁,外键

  2.InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这  些功能增加了多用户部署和性能。在SQL查询中,可以*地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合

  3.InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数据库引擎锁不能匹敌的

  4.InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。

  5.InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键。

  6.提供了良好的崩溃修复能力和并发控制

缺点:

  读写效率较差,占用的数据空间相对较大

InnoDB中,创建的表的表结构存储在.frm文件中。数据和索引存储在innodb_data_home_dir和innodb_data_file_path定义的表空间中。

InnoDB使用B Tree作为索引结构,

  主键索引,叶子节点存放就是数据本身了,叶子节点上存放的是所有的数据

  普通索引,叶子节点只存放了创建索引的属性和主键,如果想知道所有的属性,需要通过得到的主键再去主键索引树上查询。

 

MyISAM引擎

基于ISAM存储引擎,MyISAM拥有较高的插入、查询速度,但不支持事务。

主要特性:

  1.大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持。

  2.当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成。

  3.每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16

  4.NULL被允许在索引的列中,这个值占每个键的0~1个字节

  5.可以把数据文件(.MYD)和索引文件(.MYI)放在不同目录(InnoDB是放在一个目录里面的)

  6.占用空间小,读写速度快

缺点:

  不支持事务

MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frmMYDMYI。其实,frm文件存储表的结构;MYD文件存储数据,是MYData的缩写;MYI文件存储索引,是MYIndex的缩写。

MyISAM引擎使用B Tree作为索引结构,叶节点的data域存放的是数据记录的地址,再根据地址找到数据。

Memory引擎: 

  1.MEMORY表支持hash索引,查找操作非常快

  2.MEMORY表使用一个固定的记录长度格式

  3.MEMORY不支持BLOB或TEXT列

  4.Memory表每行的长度固定,即使制定了varchar列,实际存储也会转换为char

  5.MySQL在执行查询过程中需要使用临时表来保存中间结果,内部使用的临时表为Memory表。如果中间结果过大或含有BLOB,TEXT字段,临时表会转化为MyISAM表。

缺点:

  如果重启机器或者关机,表中的所有数据都将消失,因此,基于Memory存储引擎的表的生命周期都比较短,一般都是一次性的。

引擎的选择:

引擎 InnoDB MyISAM Memory
支持事务 YES NO NO
支持全文索引 NO   YES  NO
插入数据的速度
支持外键 YES NO NO
支持热备份 YES NO NO
崩溃恢复效率