学习配套视频:黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、MySQL优化全囊括 https://www.bilibili.com/video/BV1Kr4y1i7ru?p=158&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=bf4eb9e00649104ee4ec443e363be4b6

image.png

1 存储引擎

1.1 MySQL体系结构

image.png

  1. 连接层:接收客户端连接,认证授权
  2. 服务层:核心服务,例如:DML,DDL,存储过程,视图,触发器
  3. 引擎层:可插拔式存储引擎,索引也在引擎层,因为不同存储引擎索引的结构是不同的
  4. 存储层:数据是存储在磁盘文件中的,日志(查询日志,慢查询日志)、锁、索引、二进制制。

1.2 存储引擎简介

  1. 概念
  • 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。基于表的。
  1. 查看表的存储引擎
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
  1. 建表时指定存储引擎
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)
  1. 查看当前数据库支持的存储引擎
mysql> show engines;	

image.png

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

1.3 存储引擎特点

  1. 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

  1. MyISAM存储引擎
  • 含义:是MySQL早期的默认存储引擎

  • 特点:

    • 不支持事务,不支持外键
    • 支持表锁,不支持行锁
    • 访问速度快
  • 文件存储:

    • MySQL5.5版本

image.png

  • MySQL8版本

image.png

image.png

  1. Memory存储引擎
  • 介绍:表数据存储在内存中,将表作为临时表或者缓存作用
  • 特点:
    • 内存存放
    • hash索引(默认)
  • 文件:
    • xxx.sdi :存储表结构信息
    • 其他的表数据存在内存中了
  1. 三者特点比较 image.png

1.4 存储引擎选择

  1. InnoDB:对事务要求高、并在并发条件要求数据一致、除查和增外,还需要改删。
  2. MyISAM:查和增操作为主,很少的改和删,对事务完整性和并发要求不高。
  • 例如业务系统的日志的数据,电商的足迹、评论的数据

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

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

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