MySQL 8.0 是 MySQL 数据库管理系统的一次重大版本升级,于 2018 年发布。它引入了许多新特性、性能优化和安全增强,以下是选择 MySQL 8.0 的主要理由:
1. 性能显著提升
- 事务性数据字典:
元数据(如表结构)存储在事务性 InnoDB 表中,取代了之前的文件存储(如.frm文件),提高了元数据操作的原子性和崩溃恢复能力。 - 改进的优化器:
支持 隐藏索引(可临时禁用索引测试性能)、降序索引(优化ORDER BY column DESC查询)、直方图统计(更精准的查询计划)。 - 并行查询(实验性):
支持特定场景下的多线程查询提速(如全表扫描)。
2. 增强的 SQL 功能
- 通用表表达式(CTE):
支持WITH子句实现递归或非递归的复杂查询,简化复杂 SQL 编写。 - 窗口函数:
支持OVER()子句实现分组聚合(如ROW_NUMBER(),RANK()),无需自连接或子查询。 - JSON 增强:
新增JSON_TABLE、JSON_PATH等函数,支持 JSON 数据的部分更新(JSON_MERGE_PATCH),性能优化。
3. 安全性改进
- 默认加密:
默认启用caching_sha2_password认证插件(替代旧的mysql_native_password),支持更强的密码哈希。 - 角色管理:
支持数据库角色(Role),简化权限分配(如CREATE ROLE,GRANT)。 - 动态权限:
细粒度的权限控制(如SYSTEM_VARIABLES_ADMIN)。
4. 高可用性与复制
- 基于 GTID 的复制:
全局事务标识符(GTID)成为默认配置,简化主从切换和故障恢复。 - 组复制(Group Replication):
原生支持多主/单主模式的同步复制,提供高可用集群方案。 - 克隆插件:
快速克隆实例(本地或远程),提速备份或副本创建。
5. 其他关键改进
- 原子 DDL:
CREATE TABLE、ALTER TABLE等操作支持原子性,避免部分执行导致的元数据不一致。 - 资源管理:
通过资源组(Resource Groups)限制 CPU 使用率,避免单一查询耗尽资源。 - InnoDB 增强:
支持自增主键持久化(解决重启后值跳跃问题)、临时表空间优化。
6. 弃用与不兼容变化
- 移除旧特性:
如Query Cache(性能瓶颈)、MyISAM系统表(全部转为 InnoDB)。 - 默认字符集:
从latin1改为utf8mb4(完整支持 Unicode,包括 emoji)。 - 严格模式默认开启:
数据插入/更新更规范,减少隐式转换。
何时考虑升级?
- 新项目:直接使用 MySQL 8.0,充分利用新特性。
- 旧版本迁移:需测试兼容性(如 SQL 语法、驱动支持),尤其是从 MySQL 5.7 或更早版本升级。
总结
MySQL 8.0 在性能、功能、安全性和可维护性上均有质的飞跃,是现代化应用的首选。如果项目允许,升级到 MySQL 8.0 能获得更好的长期支持(MySQL 5.7 已于 2023 年 10 月结束官方支持)。
云服务器