MySQL--008

一、MySQL 四层体系结构

1. 连接层

  • 最上层,负责客户端与服务器的连接处理、授权认证、安全方案制定。
  • 管理连接池,实现线程复用、连接限制、内存检查与缓存管理。
  • 支持多种客户端连接器:Native C API、JDBC、ODBC、.NET、PHP、Python、Perl 等,兼容不同语言开发。
  • 核心职责:验证客户端身份与操作权限,保障安全接入。

2. 服务层

  • MySQL 核心服务层,所有跨存储引擎的功能均在此实现。
  • 包含核心模块:
    • 连接池:管理线程复用、连接数限制、内存检查与缓存。
    • SQL 接口:处理 DML(数据操作)、DDL(数据定义)、存储过程、视图、触发器等。
    • 解析器:完成 SQL 语句解析、对象权限检查。
    • 查询优化器:生成最优执行路径,通过统计信息选择访问策略。
    • 缓存:全局缓存与引擎级缓存,提升查询性能。
    • 系统管理和控制工具:备份恢复、安全管理、复制、集群、配置管理、元数据管理等。

3. 引擎层(可插拔存储引擎)

  • 真正负责数据的存储与提取,服务器通过 API 与存储引擎通信。
  • 存储引擎是基于表的(而非基于库),也称为表类型,不同表可使用不同引擎。
  • 主流引擎:InnoDB(默认)、MyISAM、Memory、NDB、Archive 等,可根据业务需求灵活选择。

4. 存储层

  • 将数据与日志持久化到文件系统之上,与存储引擎完成交互。
  • 包含系统文件(NTFS、ext2/3、NFS、SAN、NAS 等)和各类日志文件:Redo log、Undo log、数据文件、索引文件、二进制日志、错误日志、查询日志、慢查询日志等。

二、三大主流存储引擎详解

1. InnoDB 引擎(MySQL 5.5+ 默认)

核心介绍
  • 兼顾高可靠性与高性能的通用存储引擎,是现代 MySQL 应用的默认选择。
  • 支持完整的事务特性,遵循 ACID 模型。
核心特点
  • 事务安全:支持事务(Transaction),保障数据操作的原子性、一致性、隔离性、持久性。
  • 锁机制:采用行级锁(Row-Level Locking),大幅提升并发访问性能,适合多写场景。
  • 外键约束:支持 FOREIGN KEY 外键,保证数据完整性与正确性。
  • 索引支持:默认 B+Tree 索引,MySQL 5.6 版本后开始支持全文索引。
  • 崩溃恢复:具备崩溃恢复能力,可通过 Redo/Undo 日志恢复数据,保障数据安全。
  • 存储限制:单表最大存储容量可达 64TB。
  • 空间与内存使用:占用空间与内存较高(需存储数据、索引及事务日志)。
  • 批量插入速度:相对较慢(事务日志与锁机制带来开销)。
存储文件
  • 每张表对应一个 .ibd 文件(由参数 innodb_file_per_table 控制),存储表结构(frm/sdi)、数据和索引。
  • 逻辑存储结构:表空间(Tablespace)→ 段(Segment)→ 区(Extent)→ 页(Page)→ 行(Row),行结构包含事务 ID、回滚指针、列数据等。

2. MyISAM 引擎(MySQL 早期默认)

核心介绍
  • MySQL 5.1 及之前版本的默认存储引擎,以读性能优异著称。
  • 不支持事务与外键,属于非事务型引擎。
核心特点
  • 事务安全:不支持事务,不保证数据操作的原子性与一致性。
  • 锁机制:采用表级锁(Table-Level Locking),并发写性能差,读性能较高。
  • 外键约束:不支持外键。
  • 索引支持:默认 B+Tree 索引,原生支持全文索引。
  • 崩溃恢复 :不支持自动崩溃恢复,崩溃后需手动执行 REPAIR TABLE 修复,存在数据丢失风险。
  • 存储限制:存在存储容量限制。
  • 空间与内存使用:占用空间与内存较低(无需存储事务日志)。
  • 批量插入速度:极快(无事务开销与行锁开销)。
存储文件
  • 每张表对应三类文件:
    • .sdi:存储表结构信息。
    • .MYD:存储表数据。
    • .MYI:存储表索引。

3. Memory 引擎(内存存储引擎)

核心介绍
  • 表数据完全存储在内存中,访问速度极快,但数据易失(断电或重启后丢失)。
  • 仅用于临时表或缓存场景,不适合存储核心业务数据。
核心特点
  • 事务安全:不支持事务。
  • 锁机制:采用表级锁,并发性能有限。
  • 外键约束:不支持外键。
  • 索引支持:默认 Hash 索引(等值查询极快),也支持 B+Tree 索引。
  • 数据安全:数据完全存储在内存中,断电或服务重启后数据全部丢失。
  • 存储限制:表大小受物理内存限制,无法存储大表。
  • 空间与内存使用:占用中等内存(数据全存内存),无磁盘空间占用(除表结构文件)。
  • 批量插入速度:极快(内存操作无磁盘 I/O 开销)。
存储文件
  • 仅存储 .sdi 表结构文件,数据与索引均在内存中,不落地磁盘。

三、存储引擎选型指南

1. InnoDB 适用场景

  • 事务完整性要求高,需要保障数据一致性的业务(如金融、电商订单)。
  • 并发访问频繁,存在大量更新、删除操作的系统。
  • 需要外键约束保障数据完整性的场景。
  • 现代 MySQL 应用的默认首选,覆盖 90% 以上业务场景。

2. MyISAM 适用场景

  • 读操作和插入操作为主,极少更新、删除的静态业务(如日志库、历史数据归档)。
  • 对事务完整性、并发性能要求极低的老旧系统。
  • 目前已逐渐被 InnoDB 替代,仅在特定历史场景中使用。

3. Memory 适用场景

  • 用于临时表缓存表,存储高频访问的中间结果集。
  • 对访问速度要求极高,且数据可丢失的场景(如会话数据、临时统计数据)。
  • 不适合存储核心业务数据,避免断电导致数据丢失。

四、常用操作命令

sql

复制代码
-- 查看当前数据库支持的所有存储引擎
SHOW ENGINES;

-- 查看指定表的存储引擎
SHOW CREATE TABLE 表名;

-- 创建表时指定存储引擎
CREATE TABLE 表名(
    字段1 字段1类型 [COMMENT 字段1注释],
    字段2 字段2类型 [COMMENT 字段2注释],
    ...
) ENGINE = 引擎名 [COMMENT 表注释];

-- 示例:创建表并指定 InnoDB 引擎
CREATE TABLE user(
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID',
    name VARCHAR(50) NOT NULL COMMENT '用户名'
) ENGINE = InnoDB COMMENT '用户表';

五、核心特性对比总表

表格

特性 InnoDB MyISAM Memory
存储限制 64TB
事务安全 支持 不支持 不支持
锁机制 行级锁 表级锁 表级锁
B+Tree 索引 支持 支持 支持
Hash 索引 不支持 不支持 支持(默认)
全文索引 5.6+ 支持 支持 不支持
空间使用 N/A
内存使用 中等
批量插入速度
外键支持 支持 不支持 不支持
崩溃恢复 支持 需手动修复 数据易失
相关推荐
2301_781571421 天前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
养肥胖虎1 天前
RAG学习笔记(3):区分数据库检索与RAG的使用场景
数据库·ai·rag
_ku_ku_1 天前
数据库系统原理 · 数据库应用开发 · 自学总结
数据库
长谷深风1111 天前
索引提速秘籍【个人八股】
mysql·b+树·索引·索引设计原则·存储引擎优化·索引维护成本·字段选择策略
No8g攻城狮1 天前
【人大金仓】wsl2+ubuntu22.04安装人大金仓数据库V9
java·数据库·spring boot·非关系型数据库
山峰哥1 天前
SQL慢查询调优实战:从全表扫描到索引覆盖的完整复盘
前端·数据库·sql·性能优化
Irene19911 天前
在 WSL 中下载安装 MySQL,连接到 SQLyog(MySQL 安装在 WSL vs Windows 本地对比)
mysql·wsl
代码中介商1 天前
Redis入门:5大数据类型全解析
数据库·redis·缓存
渣渣盟1 天前
数据库设计范式详解(纯小白版)
数据库·oracle·软考·数据库工程师
夜雪闻竹1 天前
Cursor 对话导入:解析 SQLite 里的宝藏
数据库·sqlite·ai编程