存储引擎
此笔记参考黑马教程,仅学习使用,如有侵权,联系必删
文章目录
- 存储引擎
- 1. MySQL 体系结构
- 2. 存储引擎简介
- 2.1 语法
- 代码演示
- 3. 存储引擎特点
- InnoDB
- 介绍
- 特点
- 文件
- 逻辑存储结构
- MyISAM
- 介绍
- 特点
- 文件
- Memory
- 介绍
- 特点
- 文件
- 总结
- 4. 存储引擎选择
- 总结
1. MySQL 体系结构
- MySQL 体系结构图
-
连接层:接收客户端的连接,完成一些连接的处理,以及认证授权的相关操作,以及相关的一些安全方案,还要去检查是否超过最大连接数等等
- 我们输入用户名、密码后就是在连接层校验用户名、密码(授权认证)
- 授权认证完成后,还要去校验每一个客户端所具有的权限,能够操作哪些数据库、哪些表
-
服务层:绝大部分的核心功能都是在服务层完成的,像 sql 接口、查询解析器、查询优化器、查询缓存,所有跨存储引擎的实现也都是在服务层实现的,比如 DML 语句、DDL 语句的封装还有存储、过程视图触发器都是在第二层
-
引擎层:在 MySQL 中提供了很多存储引擎供我们选择,而且,如果这些存储引擎不能够满足我们的需求,我们还可以在其基础上进行拓展,所以称之为可插拔式的存储引擎
- 存储引擎控制的就是 MySQL 当中的数据的存储和提取的方式,服务器会通过 API 和存储引擎来进行通信和交互
- InnoDB 引擎是 MySQL 5.5 版本之后默认的存储引擎
-
存储层:存储引擎控制的是数据库的数据该如何来存、如何来取、如何来进行组织。而具体的数据库的数据最终是存储在磁盘当中的,所以最后一层存储层主要是来存储数据库的相关数据,这里面包含一系列的日志,像 Redo log、Undo log、数据、索引二进制志、错误日志、查询日志、慢查询日志
2. 存储引擎简介
-
存储引擎是存储数据、建立索引、更新 / 查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可以被称为表类型
-
查询建表语句
-- 查询建表语句 --- 默认的存储引擎:InnoDB
show create table account;
- 结果
CREATE TABLE `account` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`money` int DEFAULT NULL COMMENT '余额',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='账户表'
ENGINE
表示存储引擎AUTO_INCREMENT=5
指代的是 id 是自增的,当插入下一条数据的时候申请的 id 是5DEFAULT CHARSET=utf8mb4
当前表的字符集默认的 utf8mb4COLLATE=utf8mb4_0900_ai_ci
表示排序方式COMMENT='账户表'
表示注释信息
2.1 语法
- 创建表时,指定存储引擎
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],...字段n 字段n类型 [COMMENT 字段n注释]
) ENGINE = INNODB [COMMENT 表注释];
- 查看当前数据库支持的存储引擎
show engines;
- InnoDB 是现在版本默认的存储引擎
- MyISAM 是 MySQL 早期版本的默认存储引擎
- MEMORY 存储在内存当中,通常用来做临时表及缓存
代码演示
-- 创建表 my_myisam,并指定MyISAM存储引擎
create table my_myisam
(id int,name varchar(10)
) engine = MyISAM;-- 创建表my_memory,指定Memory存储引擎
create table my_memory
(id int,name varchar(10)
) engine = Memory;
3. 存储引擎特点
InnoDB
介绍
- InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 存储引擎
特点
- DML 操作遵循 ACID 模型,支持事务;
- 行级锁,提高访问性能;
- 支持外键 FOREIGN KEY 约束,保证数据的完整性和正确性;
文件
- xxx.ibd:xxx 代表的是表名,InnoDB 引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引
- 参数:innodb_file_per_table
逻辑存储结构
MyISAM
介绍
- MyISAM 是 MySQL 早期的默认存储引擎
特点
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
文件
- xxx.sdi:存储表结构信息
- xxx.MYD:存储数据
- xxx.MYI:存储索引
Memory
介绍
- Memory 引擎的表数据是存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或者缓存使用
特点
- 内存存放
- hash 索引(默认)【哈希索引】
文件
- xxx.sdi:存储表结构信息
总结
特点 | InnoDB | MyISAM | Memory |
---|---|---|---|
存储限制 | 64TB | 有 | 有 |
事务安全 | 支持 | - | - |
锁机制 | 行锁 | 表锁 | 表锁 |
B+tree 索引 | 支持 | 支持 | 支持 |
Hash 索引 | - | - | 支持 |
全文索引 | 支持(5.6版本之后) | 支持 | - |
空间使用 | 高 | 低 | N/A |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外键 | 支持 | - | - |
4. 存储引擎选择
在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合
- InnoDB:是 MySQL 的默认引擎,支持事务、外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么 InnoDB 存储引擎是比较适合的选择
- MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的
- MEMORY:将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性
总结
- 体系结构
- 连接层、服务层、引擎层、存储层
- 存储引擎简介
SHOW ENGINES; # 查看当前数据库所支持的存储引擎
CREATE TABLE XXXX(...) ENGINE=INNODB; # 创建表的时候指定存储引擎
- 存储引擎特点
- INNODB 与 MyISAM:事务、外键、行级锁
- 存储引擎应用
- INNODB:存储业务系统中对于事务、数据完整性要求较高的核心数据
- MyISAM:存储业务系统的非核心事务