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
内存使用 中等
批量插入速度
外键支持 支持 不支持 不支持
崩溃恢复 支持 需手动修复 数据易失
相关推荐
wuyaolong0071 小时前
PostgreSQL 中进行数据导入和导出
大数据·数据库·postgresql
正在走向自律1 小时前
Oracle 替换工程实践深度解析 —— 从技术落地到生产级平稳迁移
数据库·oracle·国产化替代·金仓kingbasees
zb200641201 小时前
Redis的Spring配置
数据库·redis·spring
全栈小51 小时前
【数据库】复杂查询,从84ms到0.14ms:一次JOIN条件下推,让复杂查询性能暴涨600倍
数据库
顶点多余1 小时前
MysqL---表的内外连接 (重点)
数据库·mysql
6+h1 小时前
【MySQL】锁机制详解
数据库·mysql
xyyaihxl2 小时前
mysql中主键索引和联合索引的原理解析
数据库·mysql
七夜zippoe2 小时前
Python错误追踪终极指南:Sentry集成与深度定制实战
数据库·python·sentry·告警策略·错误追踪
lihao lihao2 小时前
MySQl复合查询
数据库·sql·mysql