MySQL三种存储引擎的区别

本文最后更新于:2023年3月24日 下午

一、引言

存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。我们可以根据数据的特点来选择不同的存储引擎。

二、三个存储引擎的介绍

1,InnoDB

介绍

InnoDB给MySQL的表提供了事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全。在MySQL从3.23.34a开始包含InnnoDB。它是MySQL上第一个提供外键约束的表引擎。而且InnoDB对事务处理的能力,也是其他存储引擎不能比拟的。靠后版本的MySQL的默认存储引擎就是InnoDB支持id自增,还支持外键。

特点

(1)事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全

innodb存储引擎该mysql表提供了事务,回滚以及系统崩溃修复能力和多版本迸发控制的事务安全。

(2)支持主键自增

innodb支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话怎会进行自动存现有的值开始增值,如果有但是比现在的还大,则就保存这个值。

(3)支持外键

innodb存储引擎支持外键(foreign key) ,外键所在的表称为子表而所依赖的表称为父表。

(4)支持事务和事务相关联的功能

innodb存储引擎最重要的是支持事务,以及事务相关联功能。

(5)支持行级锁

innodb存储引擎支持mvcc的行级锁。

优缺点

  • 优势在于提供了良好的事务处理、崩溃修复能力和并发控制。
  • 缺点是读写效率较差,占用的数据空间相对较大(连表查询)。

2,MyISAM

介绍

MyISAM存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。
myisam类型的表支持三种不同的存储结构:静态型、动态型、压缩型。

三种结构

(1)静态型

静态型是MyISAM的默认存储格式,只要表的字段是固定长度的(即不含有:xblob、xtext、varchar等长度可变的数据类型),这样mysql就会自动使用静态myisam格式。

使用静态格式的表的性能比较高,在维护和访问的时候以预定格式存储数据时需要的开销很低。但是这高性能是用空间换来的,因为在定义的时候是固定的,所以不管列中的值有多大,都会以最大值为准,占据了整个空间。

(2)动态型

动态型包含变长字段,记录的长度不是固定的,其优点是它存数据时,采用的是数据的实际长度,能节省不少空间,但也是由于这点,当数据要做更新时,长度发生变更时,就不会存在原来的位置,而存在别的位置,造成原来的位置形成一空洞,并且关联的数据并不是存放在相邻的块中,而且产生大量的碎片,要定期进行碎片整理。

(3)压缩型

如果在这个数据库中创建的是在整个生命周期内只读的表,用myisampack工具进行压缩,空间占用相当小,只有原大小的一半,而且读取数据时,还会对数据进行加压缩,并且注意该类型的表是只读表,不能进行修改。

3,MEMORY

介绍

服务器需要有足够的内存来维持MEMORY存储引擎的表的使用。如果不需要了,可以释放内存,甚至删除不需要的表。

特点

(1)数据全部放在内存中

memory存储引擎相比前面的一些存储引擎,有点不一样,其使用存储在内从中的数据来创建表,而且所有的数据也都存储在内存中

(2)存储表结构的frm文件

每个基于memory存储引擎的表实际对应一个磁盘文件,该文件的文件名和表名是相同的,类型为.frm。该文件只存储表的结构,而其数据文件,都是存储在内存中,这样有利于对数据的快速处理,提高整个表的处理能力

(3)索引类型

memory存储引擎默认使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果读者希望使用B树型,则在创建的时候可以引用。

(4)不常用,数据容易消失

memory存储引擎文件数据都存储在内存中,如果mysqld进程发生异常,重启或关闭机器这些数据都会消失。所以memory存储引擎中的表的生命周期很短,一般只使用一次。

三、区别

图表

区别

文字

InnoDB

  • 优势在于提供了良好的事务处理、崩溃修复能力和并发控制。
  • 缺点是读写效率较差,占用的数据空间相对较大。

MyISAM

  • 优势在于占用空间小,处理速度快。
  • 缺点是不支持事务的完整性和并发性。

MEMORY

  • 数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表

简洁版

InnoDB

  • 支持事务、外键、行锁

MyISAM

  • 支持表锁,访问快

Memory

  • 存在内存中

四、参考

mysql存储引擎的区别
Mysql三种存储引擎及区别


MySQL三种存储引擎的区别
https://moechun.fun/2022/09/29/MySQL三种存储引擎的区别/
作者
Knight Kilito
发布于
2022年9月29日
更新于
2023年3月24日
许可协议