Mysql存储引擎
Mysql当中常见的存储引擎
-
InnoDB:这是 MySQL 默认的存储引擎,支持事务和行级锁定,适用于需要高并发和高可靠性的应用程序。
-
MyISAM:这是 MySQL 最早的存储引擎之一,不支持事务和行级锁定,但速度较快,适用于读操作比写操作更频繁的应用程序。
-
Memory:这是 MySQL 中的内存存储引擎,适用于需要快速读写的数据存储,但是它不支持持久化存储,当 MySQL 服务重启时,内存中的数据将丢失。
-
Archive:这是 MySQL 中的归档存储引擎,适用于对大量历史数据进行归档存储和压缩的场景,但是不支持索引和事务。
-
CSV:这是 MySQL 中的 CSV 存储引擎,适用于需要将数据导出为 CSV 格式的场景,但是不支持索引和事务。
-
NDB:这是 MySQL 中的集群存储引擎,适用于分布式数据存储和高可用性要求较高的场景。
此外,MySQL 还支持其他一些存储引擎,如 Blackhole、Federated、Merge 等
查看数据库支持的存储引擎
show engines
可以看到Mysql支持的存储引擎,其中InnoDB是默认的存储引擎(Mysql5.5之后),当建表时没指定存储引擎就会使用默认的存储引擎。
存储引擎特点
InnoDB
- 介绍
- InnoDB时一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB时默认的MySQL存储引擎。
- 特点
-
- DML操作遵循ACID模型,支持
事务
; 行级锁
,提高并发访问性能;- 支持
外键
FOREIGN KEY约束,保证数据的完整性和正确性;
- DML操作遵循ACID模型,支持
- 文件
-
- xxx.ibd:xxx代表的是文件名,InnoDB引擎每张表都会对应这样一个表空间文件,存储该表的结构(frm、sdi)、数据和索引。
- 参数:innodb_file_per_table
- 逻辑存储结构:
-
- 表空间(Tablespace):InnoDB将所有表数据存储在表空间中,每个表空间对应一个.ibd文件。表空间分为系统表空间和用户表空间,其中系统表空间包含一些元数据信息,如InnoDB的数据字典等;用户表空间存储用户创建的表和索引数据。
- 页面(Page):InnoDB使用固定大小的页面来组织表数据,通常大小为16KB。每个页面都有一个唯一的页面编号,页面由数据页和索引页两种类型。
- 行(Row):InnoDB以行为单位来存储表数据,每一行记录都包含一个主键和其他列数据。
- 索引(Index):InnoDB使用B+树来实现索引,包括主键索引和辅助索引。每个索引都由多个页面组成,根据页面编号形成B+树结构。在查询数据时,InnoDB使用索引来定位数据页和行记录,以提高查询效率。
总体而言,InnoDB的逻辑存储结构是基于页的存储引擎,以行为单位存储数据,使用B+树实现索引来提高查询效率。
MyISAM
- 介绍
-
- MyISAM是MySQL早期的默认存储引擎。
- 特点
-
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
- 文件
-
- xxx.sdi:存储表结构信息
- xxx.MYD:存储数据
- xxx.MYI:存储索引
Memory
- 介绍
-
- Memory存储引擎的表数据是存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。
- 特点
-
- 内存存放
- hash索引(默认)
- 文件
-
- xxx.sdi:存储表结构信息。
存储引擎选择
在选择存储引擎时,应该根据系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。
- InnoDB:时Mysql的默认存储引擎,支持事务、外键。。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎时比较合适的。
- MyISAM:如果应用是以读操作和插入操作为主,只有少量的更新和删除操作,并且对事务的完整性、并发性要求并不是很高,那么选择这个存储引擎是非常合适的。
- MEMORY:将所有数据保存在内存中,访问速度块,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。