存储引擎

Mysql体系结构

alt text 在MySQL Server服务端是分层的 alt text

  1. 连接层:接受客户端连接,完成一些连接的处理和认证授权,校验用户名和密码等操作
  2. 服务层:绝大多数操作、跨存储引擎的操作都在这一层
  3. 引擎层:控制数据如何来存,如何来组织。可插拔存储引擎,有多种引擎选择,可以添加或者去掉某些引擎
    (注意:index索引是在存储引擎层实现的,所以不同存储引擎的索引结构不一样)
  4. 存储层: 存储数据库的数据,包括数据、日志,都存在磁盘中

存储引擎简介

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型

  1. 在创建表时,指定存储引擎
create table 表明(
    字段1 字段1类型 [COMMENT],
    ...
    字段 n 字段n类型 [COMMENT]
)engine = InnoDB [COMMENT];
  1. 查看当前数据库支持的存储引擎
SHOW ENGINES;

InnoDB

介绍:

InnoDB是兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5之后, InnoDB是默认的MySQL存储引擎

特点:

  1. DML操作遵循ACID模型,支持事务;
  2. 行级锁,提高并发访问性能
  3. 支持外键FOREIGN KEY约束,保证数据完整性和正确性

文件:

xxx.ibd: xxx代表的是表名,innoDB引擎的每张表都会对于这样一个表空间文件,存储该表的表结构(frm, sdi)、数据和索引

逻辑存储结构:

alt text Trx id---最后一次操作的事务id Roll Pointer----一些指针 后面col就是字段

MylSAM

早期MySQL的默认存储引擎

特点

  1. 不支持事务,不支持外键
  2. 支持表锁,不支持行锁
  3. 访问速度快

文件

  1. xxx.sdi: 存储表结构信息
  2. xxx.MYD: 存储数据
  3. xxx.MYI: 存储索引

Memory

Memory引擎的表数据是存储在内存中的,由于收到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用

特点

  1. 内存存放
  2. hash索引(默认)

文件

xxx.sdi: 存储表结构信息

InnoDB & MylSAM & Memory

alt text 重点看InnoDB和MylSAM的三个黄色的区别

存储引擎的选择

  1. InnoDB: Mysql默认存储引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择
  2. MylSAM: 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,可以选择 (被MonGoDB取代了)
  3. MEMORY: 将数据都在保存在内存,访问速度快,常用于临时表和缓存。缺点就是对表大小有限制,太大的无法缓存在内存中,而且无法保证数据安全性(被Redis取代了)

本文章使用limfx的vscode插件快速发布