【数据库知识】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 行为改变
优化器 新成本模型 多项行为变更
安全性 更强
版本定位 稳定但老旧 主流生产 创新快速迭代
相关推荐
降临-max2 小时前
JavaWeb企业级开发---MySQL
java·开发语言·数据库·笔记·后端·mysql
代码不停2 小时前
MySQL索引和视图
数据库·mysql
Ahtacca2 小时前
Redis 五大常用数据类型详解及 Java 客户端(RedisTemplate)操作实战
java·数据库·redis·学习·缓存
huaqianzkh2 小时前
对应数据仓库、数据湖与湖仓一体三类场景开箱即用的工具清单
数据库
计算机毕设VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue个人博客系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
十五年专注C++开发3 小时前
浅谈Qt中的QSql模块整体设计
开发语言·数据库·c++·qt
TDengine (老段)3 小时前
TDengine 生态系统连接指南
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
k***92163 小时前
C++:继承
java·数据库·c++
一只旭宝4 小时前
Linux专题十二:mysql数据库以及redis数据库
linux·数据库·mysql