1 缘起
一次在逛Docker市场时,搜索MySQL镜像时,发现最新版本已经到9.5.0了,实际生产环境使用的MySQL8.0版本,从5.x版本升级到8.0刚有2年光景,现在MySQL已经迭代到9.5.0版本,想对比不同版本的特定,于是有本篇文章。
简单介绍版本变更。

2 总览:版本跨度与定位
| 版本 | 发布时间区间 | 定位 | 特点 |
|---|---|---|---|
| MySQL 5.x | 2008--2016 | 经典稳定版 | 功能老旧、性能瓶颈明显 |
| MySQL 8.0 | 2018--至今 | 主流生产版本 | 架构大升级、性能飞跃、JSON/CTE/窗口函数等现代 SQL |
| MySQL 9.5 | 2025(创新版) | 创新快速迭代 | 新特性试验场,包含大量行为变更 |
3 MySQL 5.x → MySQL 8.0:一次"跨时代"升级
这是 MySQL 历史上最大的一次架构升级。
3.1 存储引擎与底层架构
InnoDB 成为默认引擎(5.x 时代 MyISAM 仍大量使用)
数据字典重写:从文件系统迁移到 InnoDB 表中(极大提升一致性)
事务性 DDL:DDL 失败可回滚(5.x 不支持)
3.2 性能大幅提升
新的 成本模型优化器
更高效的 redo/undo log 管理
并行查询、并行 DDL
更好的索引管理(隐藏索引、降序索引)
3.2.1 什么是隐藏索引?
隐藏索引(Invisible Index)是 MySQL 8.0.19 引入的新特性,它允许你让某个索引对优化器不可见,但索引仍然存在于表结构中。
索引仍然维护(插入/更新时仍更新)
但优化器不会使用它
适合测试"删除索引是否安全"
3.2.2 使用场景
-
想删除一个索引,但担心影响性能
→ 先把索引设为 INVISIBLE,观察是否有慢查询
-
测试优化器行为
-
灾难恢复(快速恢复索引可见性)
-
案例
-- 创建隐藏索引
CREATE INDEX idx_age ON users(age) INVISIBLE;-- 修改索引为可见
ALTER INDEX idx_age VISIBLE;-- 修改索引为隐藏
ALTER INDEX idx_age INVISIBLE;
3.3.3 什么是降序索引?
从 MySQL 8.0 开始,DESC 在索引定义中不再被忽略,而是会真正以降序方式存储索引值。
以前 MySQL 只能"反向扫描"升序索引,性能较差
现在可以真正创建降序索引,扫描效率更高
-
优势
ORDER BY xxx DESC 的查询速度更快
-
多列索引可以混合升序/降序
→ 优化器可以选择更高效的扫描方式
-
案例
CREATE TABLE t (
c1 INT,
c2 INT,
INDEX idx1 (c1 ASC, c2 DESC)
);
| 特性 | 隐藏索引 | 降序索引 |
|---|---|---|
| 作用 | 控制优化器是否使用索引 | 控制索引的物理排序方式 |
| 是否影响数据写入 | 会维护索引 | 会维护索引 |
| 是否影响查询计划 | ✔(优化器不可见) | ✔(优化器可选择更优扫描) |
| 使用场景 | 索引删除前测试、调优 | ORDER BY DESC、混合排序优化 |
| MySQL 版本 | 8.0+ | 8.0+ |
3.3 SQL 功能现代化
5.x 缺失的现代 SQL 在 8.0 全部补齐:
| 功能 | 5.x | 8.0 |
|---|---|---|
| 窗口函数 | ❌ | ✔ |
| 公用表表达式(CTE) | ❌ | ✔ |
| JSON 原生类型 | ❌ | ✔ |
| JSON 索引 | ❌ | ✔ |
| 隐式主键 | ❌ | ✔ |
| 正则表达式升级(ICU) | ❌ | ✔ |
3.4 安全性
默认使用 caching_sha2_password(更安全)
更严格的密码策略
3.5 其他重要变化
完全重写的 全文索引
更强大的 GIS/空间数据
更丰富的 Performance Schema 和 sys schema
4 MySQL 8.0 → MySQL 9.5:创新版的新增与变更
根据官方 9.5 文档,9.5 是"创新版本",包含大量行为变更。
4.1 InnoDB 行为变更
innodb_log_writer_threads 默认行为改变:现在会根据是否启用 binlog 自动调整线程数
→ 这会影响写入性能与延迟。
4.2 账户与权限系统增强
新增 activate_mandatory_roles,可强制启用某些角色
→ 更适合企业级权限治理。
4.3 JSON / JavaScript / JSON Duality Views
JSON 相关功能进一步增强(如 JSON Duality Views)
→ 更接近文档数据库体验。
4.4 优化器改进
多项优化器行为调整(官方文档列出大量变更)
4.5 组件、插件、二进制日志等大量更新
二进制日志行为调整
Keyring、Audit、Thread Pool 等组件更新
sys schema 更新
大量 Bug 修复(官方文档列出几十项)
5 三个版本的核心差异总结表
| 领域 | MySQL 5.x | MySQL 8.0 | MySQL 9.5 |
|---|---|---|---|
| 数据字典 | 文件系统 | InnoDB 表 | 同 8.0 |
| 默认引擎 | MyISAM | InnoDB | InnoDB |
| JSON 支持 | ❌ | ✔ | ✔(增强) |
| 窗口函数 | ❌ | ✔ | ✔ |
| CTE | ❌ | ✔ | ✔ |
| 权限系统 | 传统 | 角色系统 | 强制角色 activate_mandatory_roles |
| InnoDB | 老架构 | 大幅重写 | log writer 行为改变 |
| 优化器 | 旧 | 新成本模型 | 多项行为变更 |
| 安全性 | 弱 | 强 | 更强 |
| 版本定位 | 稳定但老旧 | 主流生产 | 创新快速迭代 |