sqllps

90 阅读3分钟

MySQL 8.0 相较于 MySQL 5.x 版本,在性能、功能、安全性和易用性等方面有显著提升。以下是主要区别:


1. 性能改进

  • 更快的查询性能:MySQL 8.0 优化了查询执行计划,支持更好的索引使用和查询优化。
  • 并行查询:支持某些查询的并行执行,提升复杂查询的性能。
  • 更快的读写操作:改进了 InnoDB 存储引擎的读写性能。
  • 原子 DDL 操作:DDL 操作(如 CREATE TABLEALTER TABLE)现在是原子的,确保操作要么完全成功,要么完全回滚。

2. 功能增强

  • 窗口函数:MySQL 8.0 支持窗口函数(如 ROW_NUMBER()RANK()OVER()),便于复杂数据分析。
  • 通用表表达式 (CTE):支持递归和非递归的 CTE,提升复杂查询的可读性和可维护性。
  • JSON 增强
    • 新增 JSON 函数(如 JSON_TABLEJSON_MERGE_PATCH)。
    • 支持 JSON 数据的部分更新。
  • 角色管理:引入角色(Role)功能,简化用户权限管理。
  • 默认字符集:默认字符集从 latin1 改为 utf8mb4,更好地支持多语言和表情符号。
  • 隐藏索引:支持隐藏索引(Invisible Index),便于测试索引对查询性能的影响。
  • 降序索引:支持降序索引,优化降序排序查询的性能。

3. 安全性提升

  • 默认身份验证插件:从 mysql_native_password 改为 caching_sha2_password,提供更强的密码加密。
  • 密码管理
    • 支持密码过期策略。
    • 支持密码历史记录,防止重复使用旧密码。
    • 支持双密码功能,便于无缝密码更新。
  • 权限管理:增强了权限控制,支持更细粒度的权限分配。

4. InnoDB 存储引擎改进

  • 事务性数据字典:元数据存储在事务性数据字典中,取代了之前的文件存储方式,提升稳定性和性能。
  • 自增主键持久化:自增主键值在重启后不会重置,确保数据一致性。
  • 死锁检测:改进了死锁检测算法,减少死锁发生的概率。

5. 复制和高可用性

  • 组复制 (Group Replication):支持多主模式,提升高可用性和扩展性。
  • 克隆插件:支持快速克隆数据库实例,简化备份和恢复操作。
  • 二进制日志改进:支持二进制日志的压缩和加密。

6. SQL 语法和功能增强

  • 正则表达式支持:新增 REGEXP_LIKE()REGEXP_REPLACE() 等正则表达式函数。
  • GIS 功能增强:改进了地理空间数据处理能力。
  • 默认值支持表达式:支持在列定义中使用表达式作为默认值。

7. 移除或弃用的功能

  • 移除 Query Cache:MySQL 8.0 移除了查询缓存功能,推荐使用其他性能优化手段。
  • 弃用的功能:如 PASSWORD() 函数、old_passwords 系统变量等被弃用。

8. 其他改进

  • 资源组管理:支持将线程绑定到特定的 CPU 核心,优化资源利用。
  • 性能模式改进:增强了性能模式(Performance Schema),提供更详细的监控信息。
  • 备份锁:引入备份锁(Backup Lock),减少备份对系统性能的影响。

总结

特性MySQL 5.xMySQL 8.0
性能较低显著提升
窗口函数不支持支持
CTE不支持支持
JSON 支持有限增强
默认字符集latin1utf8mb4
安全性较弱显著增强
原子 DDL不支持支持
查询缓存支持移除

MySQL 8.0 在性能、功能和安全性方面都有显著提升,建议新项目直接使用 MySQL 8.0,旧项目在充分测试后升级。