MySQL的存储引擎简介

一. MySQL数据库引擎的介绍

MySQL区别于其他数据库的最大地方就在于它是插件存储体系,存储引擎的好处在于每个引擎都有各自的特点,可以根据具体的需求来决定建立不同的存储引擎表。我们在使用过程中,如果对于存储引擎的性能不满意的话,可以根据需求在源码中进行修改,来得到我们想要的特性。当然,我们也可以自己编写一个存储引擎。
在这里插入图片描述

二. 各种引擎的优缺点

1. InnoDB 存储引擎

InnoDB是目前MYSQL的默认事务型引擎也是事务型数据库的首选引擎,是目前最重要、使用最广泛的存储引擎。支持事务安全表(ACID),支持行锁定和外键。

InnoDB主要特性有:

  1. InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全的存储引擎,在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合;
  2. InnoDB是为处理巨大数据量的最大性能而设计,在CPU效率方面是绝大多数基于磁盘的关系型数据库存储引擎都望尘莫及的;
  3. InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键;
  4. InnoDB通过多版本并发控制来获得高并发性,并实现了4中隔离级别(Read Uncommitted 读未提交内容、Read Committed 读已提交内容、Repeatable Read 可重复读、Serializable 可串行化),把Repeatable Read 可重复读作为默认级别
  5. InnoDB被用在众多需要高性能的大型数据库站点上,许多公司也证明了它的高可用性、高性能以及高延展性。

应用场景:

因为InnoDB支持事务处理,支持外键,支持崩溃修复能力和并发控制这些特性,对事物完整性要求较高、要求实现并发控制,例如:银行的操作系统、售票。。。InnoDB有很大的优势

2. MyISAM存储引擎

主要面向一些OLAP(Online Analytical Processing 联机分析处理)数据库应用,在MySQL5.5.8之前是作为默认存储引擎(window除外)。MyISAM不支持事物、不支持表锁设计、不支持全文索引、但它拥有较高的插入、查询速度。

MyISAM主要特性有:

  1. MyISAM是非事务安全型的;
  2. MyISAM是表级锁,而InnoDB是行级锁
  3. 对于MyISAM存储引擎表,MySQL值缓存索引文件,而数据文件交由操作系统本身来完成

应用场景:

如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率,执行大量select操作、count操作,且不需要事物时。

3. NDB存储引擎

NDB的特点是数据全部放在内存中,从MySQL 5.1版本开始,可以将非索引数据放在磁盘上,因此主键查找的速度非常快,并且通过添加NDB数据存储节点使得数据库性能线性提高,是高可用、高性能的集群系统。
但它的join操作是在MySQL数据库层完成的,所以查询速度很慢,且需要巨大的网络开销。

4. Memory存储引擎

Memory是将表中的数据存放在内存中,如果数据库崩溃或者重启了,数据就没了。

Meomory的主要特性

  1. Memory存储引擎的速度非常快,但只支持表锁、并发性能差;
  2. MEMORY存储引擎默认使用哈希索引,其速度比使用B-+Tree型要快,当然也可以使用B树型索引。

应用场景:

非常适合使用在需要该数据库中一个用于查询的临时表

5. Archive

Archive只支持insert和select操作,在MySQL 5.1 之后开始支持索引了。Archive存储引擎通过zlib算法,压缩比例可达到1:10,拥有很好的压缩机制,,非常适合存储归档数据,所以它经常被用来当做仓库使用。

Archive的主要特性

  1. 不是事务安全存储引擎;
  2. 用的的是行锁来实现高并发的插入操作

应用场景:

由于高压缩和快速插入的特点Archive非常适合作为日志表的存储引擎,但是前提是不经常对该表进行查询操作。

6. Federated

Federated存储引擎表它不存储数据,它就指向一台远程的MySQL数据库服务器上的表,而且它只支持MySQL数据库表

猜你喜欢

转载自blog.csdn.net/weixin_46687295/article/details/106877117