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
内存使用 中等
批量插入速度
外键支持 支持 不支持 不支持
崩溃恢复 支持 需手动修复 数据易失
相关推荐
m0_602857762 分钟前
如何提升SQL存储过程逻辑复用_封装通用存储过程函数
jvm·数据库·python
forEverPlume1 小时前
mysql如何实现高可用集群架构_基于MHA环境搭建与部署
jvm·数据库·python
草莓熊Lotso2 小时前
Vibe Coding 时代:LangChain 与 LangGraph 全链路解析
linux·运维·服务器·数据库·人工智能·mysql·langchain
zh1570237 小时前
JavaScript中WorkerThreads解决服务端计算瓶颈
jvm·数据库·python
代码AI弗森7 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
摇滚侠8 小时前
expdp 查看帮助
java·数据库·oracle
流年似水~9 小时前
MCP协议实战:从零搭建一个让Claude能“看见“数据库的工具服务
数据库·人工智能·程序人生·ai·ai编程
2401_871492859 小时前
Vue.js监听器watch利用回调函数处理级联下拉框数据联动
jvm·数据库·python
志栋智能9 小时前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
zhoutongsheng10 小时前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python