【数据库知识】MySQL演进/迭代5.x 8.0 9.5

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 行为改变
优化器 新成本模型 多项行为变更
安全性 更强
版本定位 稳定但老旧 主流生产 创新快速迭代
相关推荐
StackNoOverflow44 分钟前
Spring Security权限控制框架详解
java·数据库·sql
不愿透露姓名的大鹏1 小时前
Oracle归档日志爆满急救指南
linux·数据库·oracle·dba
a里啊里啊1 小时前
Redis面试题记录
数据库·redis·缓存
数据知道1 小时前
claw-code 源码分析:OmX `$team` / `$ralph`——把 AI 辅助开发从偶发灵感变成可重复流水线
数据库·人工智能·mysql·ai·claude code·claw code
__土块__1 小时前
大厂后端一面模拟:从线程安全到分布式缓存的连环追问
jvm·redis·mysql·spring·java面试·concurrenthashmap·大厂后端
麦聪聊数据1 小时前
企业数据流通与敏捷API交付实战(六):内部API门户与自助分发机制
数据库·低代码·restful·etl
做个文艺程序员2 小时前
深入 MySQL 内核:MVCC、Buffer Pool 与高并发场景下的极限调优
数据库·mysql·adb
杰克尼2 小时前
redis(day03-优惠券秒杀)
数据库·redis·缓存
七夜zippoe2 小时前
DolphinDB入门:时序数据库的正确打开方式
数据库·struts·时序数据库·工业互联网·dolphindb
数厘2 小时前
2.4MySQL安装配置指南(电商数据分析专用)
数据库·mysql·数据分析