Mysql存储引擎
Mysql存储引擎:
1. MyISAM
1.1 MyISAM存储组成
MyISAM的存储格式主要有:
1、数据文件:存储数据行, 数据文件扩展名为.MYD(MYData)。
2、索引文件:存储索引数据,索引文件扩展名为.MYI(MYIndex)。
3、frm文件:存储表定义信息,主要包括表列和列定义信息、各种属性、扩展及MyISAM的表的各种参数等信息,表定义扩展名为.MYD(MYData)。
4、opt文件:存储MyISAM表的相关选项,将缓存的表据放在此文件中。
1.2 MyISAM具有的特点:
1. 不支持事务:MyISAM表不支持事务处理,无法保证多次操作要么全部成功,要么全部失败,若不小心造成数据损坏只能重建整个表。
2. 不支持完整性约束(不支持外键):MyISAM表不支持完整性约束,比如不能建立主外键,也不能限制列的唯一性、非空性等。
3. 支持表锁:MyISAM表支持表锁、行锁,但是表锁模式在某些场景下可能会阻塞其它事务,所以不建议采用。
4. 支持全文索引:MyISAM引擎支持全文索引。
5. 支持插入高速缓存:MyISAM表支持插入高速缓存,在插入大量数据时可以大大提升效率。
6. 高读取性能:MyISAM表的数据量比较大,无法采用事务的机制防止数据的脏读,因此MyISAM表的性能更加好。(建议在主从机制中,可以在主服务器使用InnoDB存储引擎,在从结点中使用MyISAM存储引擎)
注:全文索引是指一种特殊的索引,可以让系统分析整段文本的意思,从而建立索引,方便用户在搜索引擎中搜索出包含所要搜索指定文本的信息。例如在一个文档中包含有“它的色彩艳丽”一词,只要输入“艳丽”一词就可以搜索到所要查询的文档。这样可以节省很多时间,搜索结果也会更精准。
2. InnoDB
2.1 InnoDB存储组成
InnoDB存储引擎使用B+树来索引数据,将索引数据存储在IBD文件中。InnoDB存储引擎使用两个独立的文件:索引文件和数据文件。 索引文件后缀为.ibd,它将一些B+树数据结构储存在一个文件里,用来存放关键字或是主键。 而数据文件是 .ibd 类型,部分其他内容索引文件中有新信息时将同步更新,以便恢复或更新操作的完整过程的正确性,达到索引重建、内容抵消以及内容读取的功能。 关于范式,InnoDB会自动拆分大的多样的表,形成一个索引树,通过B+树的索引去定位一条具体的数据,从而实现快速查找数据。
1.2 InnoDB具有的特点:
1. 支持事务:InnoDB存储引擎是支持事务的,它支持ACID(原子性、一致性、隔离性和持久性)特性,且实现了MVCC(多版本并发控制),支持自动提交,回滚,崩溃恢复等。
2. 支持行锁和表锁:InnoDB支持行级锁和表级锁,行级锁可以有效的提高并发性能,而表级锁可以确保数据的完整性。
3. 支持完整性约束(外键):InnoDB存储引擎支持外键约束功能,可以保证完整性,减少数据冗余。
4. 实现了类型可拓展表:InnoDB支持多字段的类型可拓展表,可以很好的满足用户的多变需求。
5. 支持多版本并发控制:InnoDB实现了多版本并发控制(MVCC),应用程序可以比较数据的变化范围,以此来避免写冲突及死锁。
6. 支持原子性:InnoDB支持事务原子性,可以让修改某行记录操作原子化。
7. 支持快照恢复:InnoDB支持快照恢复,可以从上一次发生故障后的检查点(checkpoint)开始恢复。
8. 支持分区表:InnoDB支持水平及垂直分区表,可以支持更大的表,以及提升查询性能。
9. 支持缓存机制:InnoDB内部采用预读机制,将数据放入缓存中,可以提高数据的读取性能。
10. 支持排序:InnoDB可以根据用户给出的排序域,对结果集进行排序。
A:ACID是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
1. 原子性(Atomicity):事务是作为一个不可分割的单元执行的,要么完全执行,要么完全不执行。
2. 一致性(Consistency):事务执行前和执行后,数据库必须保持一致状态。
3. 隔离性(Isolation):一个事务的执行不能被其他并发的事务所干扰。
4. 持久性(Durability):一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使发生系统故障也不应破坏其结果。
3.MEMORY
3.1,MEMORY介绍存储引擎
MEMORY存储引擎使用物理内存存储数据,在服务器关闭时会丢失存储的内容,因此又被称为内存存储引擎,不支持事务操作。
3.2,InnoDB具有的特点:
1. 速度极快:MEMORY引擎存储的数据存储在物理内存中,且没有磁盘的IO消耗,读写数据的速度非常快;
2. 服务器重启消失:MEMORY存储引擎存储的内容随着服务器的关闭而消失,因此数据不可持久化;
3. 不支持事务:MEMORY不支持事务操作,也就是说不能用ROLLBACK、COMMIT等操作;
4. 不能添加索引:MEMORY存储引擎不能添加索引,全表扫描几乎是唯一的访问方式。
用途:
MEMORY的主要应用是临时表,一些短暂的操作,使用MEMORY可以提高查询的效率,比如从复杂的表中查询 出少量的数据,在不需要持久化的场景中,使用MEMORY会更加高效。