意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

春华秋实之MySQL-01存储引擎

来源:恒创科技 编辑:恒创科技编辑部
2023-12-20 05:52:59

image.png

1 存储引擎 1.1 MySQL体系结构

image.png

连接层:接收客户端连接,认证授权 服务层:核心服务,例如:DML,DDL,存储过程,视图,触发器 引擎层:可插拔式存储引擎,索引也在引擎层,因为不同存储引擎索引的结构是不同的 存储层:数据是存储在磁盘文件中的,日志(查询日志,慢查询日志)、锁、索引、二进制制。 1.2 存储引擎简介 概念 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。基于表的。 查看表的存储引擎
mysql> show create table emp;
通过此命令可以看到当时的建表语句,engine后面就是跟的表的存储引擎
| emp   | CREATE TABLE `emp` (
  `EMPNO` int(4) NOT NULL,
  `ENAME` varchar(10) DEFAULT NULL,
  `JOB` varchar(9) DEFAULT NULL,
  `MGR` int(4) DEFAULT NULL,
  `HIREDATE` date DEFAULT NULL,
  `SAL` double(7,2) DEFAULT NULL,
  `COMM` double(7,2) DEFAULT NULL,
  `DEPTNO` int(2) DEFAULT NULL,
  PRIMARY KEY (`EMPNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
建表时指定存储引擎
CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ] ,
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) ENGINE = INNODB [ COMMENT 表注释 ] ;
mysql> create table my_myisam(
    -> id int,
    -> name varchar(10)
    -> ) engine = MyISAM;
Query OK, 0 rows affected (0.02 sec)
查看当前数据库支持的存储引擎
mysql> show engines;    

image.png

发现InnoDB是support列下面是default,即默认的存储引擎:支持事务、行级锁、外键

1.3 存储引擎特点 InnoDB存储引擎

含义:是一种兼顾高可靠性和高性能的通用存储引擎。

特点:

DML操作遵循ACID模型,支持事务 行级锁,提高并发访问性能 支持外键FK

文件存储:

xxx.ibd,表空间文件,存储了该表的表结构(frm,sdi),数据,索引 参数:innodb_file_per_table表示每张表对应一个表空间
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+
1 row in set (0.00 sec)

image.png

image.png

InnoDB的逻辑存储结构:待加强了解 page是磁盘操作的最小单元16K,extend的大小固定1M,一个区可以包含64个页

image.png

MyISAM存储引擎

含义:是MySQL早期的默认存储引擎

特点:

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

文件存储:

5.5版本

image.png

8版本

image.png

image.png

Memory存储引擎 介绍:表数据存储在内存中,将表作为临时表或者缓存作用 特点: 内存存放 hash索引(默认) 文件: xxx.sdi :存储表结构信息 其他的表数据存在内存中了 三者特点比较
image.png 1.4 存储引擎选择 InnoDB:对事务要求高、并在并发条件要求数据一致、除查和增外,还需要改删。 MyISAM:查和增操作为主,很少的改和删,对事务完整性和并发要求不高。 例如业务系统的日志的数据,电商的足迹、评论的数据

补充:一般用MyISAM的存储引擎都会被现在的Nosql数据库(非关系型数据库),例如MangoDB,Redies。

MEMORY:用于临时表和缓存。缺陷是对表的大小有限制,太大没法缓存内存中。

补充:Redies是存储在内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。它是NoSQL数据库,基于高性能的Key-Value、并提供多种语言的 API的非关系型数据库。

上一篇: Jenkins+Docker 一键自动化部署 SpringBoot 项目 下一篇: 搞定面试官 - 你可以介绍一下在 MySQL 中,哪些情况下索引会失效嘛?