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个文件。文件的名字与表名相同。拓展名为frm、MYD、MYI。其实,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 |
崩溃恢复效率 | 高 | 低 | 无 |