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
内存使用 中等
批量插入速度
外键支持 支持 不支持 不支持
崩溃恢复 支持 需手动修复 数据易失
相关推荐
入瘾2 小时前
etcd 显示连接失败
数据库·chrome·etcd
本体智能2 小时前
预制指标、宽表、SQL、本体ABC:真正决定长期成本的,是一次变更会波及多少层
数据库·sql·本体神经网络·uino数据智能引擎
长安11082 小时前
数据库基础知识----数据库大观
数据库·oracle
J超会运3 小时前
OpenEuler系统MySQL故障排查终极指南
mysql
瀚高PG实验室3 小时前
使用hgdbdeveloper开发工具导出数据后在异机恢复时报错
数据库·瀚高数据库
百结2144 小时前
PostgreSQL 初体验
数据库·postgresql
ward RINL5 小时前
Redis 安装及配置教程(Windows)【安装】
数据库·windows·redis
bingHHB6 小时前
金蝶云星空旗舰版 × 赛狐ERP:亚马逊卖家业财一体化的最后一公里
运维·数据库·集成学习
Nontee6 小时前
Redis高可用架构解析
数据库·redis·架构
淼淼爱喝水6 小时前
DVWA SQL 注入(Medium/High 级别)过滤绕过与防范实验(超详细图文版)
数据库·sql·网络安全