1. 性能改进

1.1 窗口函数(Window Functions)
  • MySQL 8.0
    • 支持窗口函数,如 ROW_NUMBER()RANK()DENSE_RANK()LEAD()LAG() 等。
    • 示例:
      SELECT id, value, ROW_NUMBER() OVER (PARTITION BY category ORDER BY value DESC) AS rank
      FROM my_table;
      
    • 窗口函数可以简化复杂查询,避免多层嵌套子查询。
  • MySQL 5.7
    • 不支持窗口函数,需通过子查询或复杂 JOIN 实现类似功能。
1.2 通用表表达式(CTE)
  • MySQL 8.0
    • 支持递归和非递归的通用表表达式(CTE)。
    • 示例:
      WITH RECURSIVE cte AS (
          SELECT 1 AS n
          UNION ALL
          SELECT n + 1 FROM cte WHERE n < 10
      )
      SELECT * FROM cte;
      
    • CTE 提高复杂查询的可读性和维护性。
  • MySQL 5.7
    • 不支持 CTE。
1.3 索引优化
  • MySQL 8.0
    • 支持 隐藏索引(Invisible Indexes),可以临时禁用索引而不删除。
      ALTER TABLE my_table ALTER INDEX idx_name INVISIBLE;
      
    • 支持 降序索引(Descending Indexes),优化 ORDER BY column DESC 查询。
      CREATE INDEX idx_name ON my_table (column DESC);
      
  • MySQL 5.7
    • 不支持隐藏索引和降序索引。

2. JSON 功能增强

2.1 JSON 操作符和函数
  • MySQL 8.0
    • 新增 JSON 操作符 ->>,替代 JSON_UNQUOTE(JSON_EXTRACT())
      SELECT json_column->>'$.key' FROM my_table;
      
    • 支持 JSON 路径表达式JSON_PATH),增强 JSON 数据查询能力。
    • 新增函数:
      • JSON_TABLE():将 JSON 数据转换为表格形式。
      • JSON_MERGE_PATCH():合并 JSON 文档。
      • JSON_STORAGE_SIZE():返回 JSON 数据的存储大小。
  • MySQL 5.7
    • JSON 功能较为基础,仅支持 JSON_EXTRACT()JSON_ARRAY()JSON_OBJECT() 等。

3. 安全性改进

3.1 默认身份验证插件
  • MySQL 8.0
    • 默认使用 caching_sha2_password 插件,提供更强的密码加密。
    • 注意:旧客户端可能不兼容,需升级或显式修改插件:
      ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
      
  • MySQL 5.7
    • 默认使用 mysql_native_password 插件。
3.2 角色管理
  • MySQL 8.0
    • 支持角色(Roles),简化权限管理。
      CREATE ROLE 'read_only';
      GRANT SELECT ON db.* TO 'read_only';
      GRANT 'read_only' TO 'user'@'host';
      
  • MySQL 5.7
    • 需手动分配权限,无角色支持。
3.3 密码策略
  • MySQL 8.0
    • 支持密码过期策略、密码复用限制、密码强度检查等。
      SET GLOBAL validate_password.policy = STRONG;
      
  • MySQL 5.7
    • 需通过插件实现部分功能。

4. 数据字典

  • MySQL 8.0
    • 重构数据字典,将系统表(如 information_schema)存储在 InnoDB 引擎中。
    • 支持 原子 DDL 操作(Atomic DDL),DDL 操作要么完全成功,要么回滚。
  • MySQL 5.7
    • 数据字典存储在 MyISAM 表中,不支持原子 DDL。

5. 字符集与编码

  • MySQL 8.0
    • 默认字符集从 latin1 改为 utf8mb4,全面支持 Unicode(包括表情符号)。
    • 支持 utf8mb4_0900_ai_ci 校对规则,提供更准确的排序和比较。
  • MySQL 5.7
    • 默认字符集为 latin1,需手动修改为 utf8mb4

6. 资源管理

  • MySQL 8.0
    • 支持资源组(Resource Groups),可限制 CPU 和线程优先级。
      CREATE RESOURCE GROUP my_group TYPE = USER VCPU = 0-1 THREAD_PRIORITY = 5;
      SET RESOURCE GROUP my_group FOR thread_id;
      
  • MySQL 5.7
    • 无此功能。

7. InnoDB 改进

  • MySQL 8.0
    • 支持 原子 DDL(Atomic DDL),DDL 操作要么完全成功,要么回滚。
    • 自增列(AUTO_INCREMENT)持久化,重启后不会重置。
    • 支持并行构建全文索引。
  • MySQL 5.7
    • 不支持原子 DDL 和自增列持久化。

8. 配置参数变化

  • MySQL 8.0
    • 移除或弃用部分旧参数(如 query_cache_typeinnodb_file_format)。
    • 新增参数(如 innodb_dedicated_server 自动配置 InnoDB 内存)。
  • MySQL 5.7
    • 使用旧参数,需手动调优。

9. 备份与恢复

  • MySQL 8.0
    • 支持 备份锁(Backup Lock),允许在线备份期间执行 DML 操作(仅阻塞 DDL)。
      LOCK INSTANCE FOR BACKUP;
      UNLOCK INSTANCE;
      
  • MySQL 5.7
    • 无备份锁功能。

10. 移除的功能

  • MySQL 8.0
    • 移除 Query Cache(查询缓存),因多核扩展性问题。
    • 移除 password() 函数,改用 SHA2 加密。
  • MySQL 5.7
    • 支持 Query Cachepassword() 函数。

11. 性能模式(Performance Schema)

  • MySQL 8.0
    • 增强性能模式,支持更多监控指标(如事务、锁、内存使用等)。
  • MySQL 5.7
    • 性能模式功能较少。

12. 优化器改进

  • MySQL 8.0
    • 支持 直方图统计(Histogram Statistics),提升复杂查询的执行计划选择。
    • 支持 跳过索引扫描(Skip Scan Index Access)。
  • MySQL 5.7
    • 不支持直方图和跳过索引扫描。

13. 复制与高可用

  • MySQL 8.0
    • 增强 Group Replication(组复制)的性能和稳定性。
    • 支持 并行复制(基于 WriteSet 的多线程复制)。
    • 默认启用二进制日志的校验和(binlog_checksum=CRC32)。
  • MySQL 5.7
    • 并行复制功能较弱。

14. 事务与隔离级别

  • MySQL 8.0
    • 默认事务隔离级别为 REPEATABLE READ(与 5.7 一致)。
    • 支持 NOWAITSKIP LOCKED 选项,优化锁竞争场景。
      SELECT * FROM my_table FOR UPDATE NOWAIT;
      
  • MySQL 5.7
    • 不支持 NOWAITSKIP LOCKED

15. 版本支持

  • MySQL 5.7
    • 已于 2023 年 10 月结束标准支持,进入扩展支持阶段。
  • MySQL 8.0
    • 是当前推荐版本,持续获得功能更新和安全补丁。

升级注意事项

  1. 兼容性问题
    • 检查客户端是否支持 caching_sha2_password
    • 确保应用代码兼容 MySQL 8.0 的关键字和保留字变化(如 RANKSYSTEM)。
  2. 性能调优
    • 由于数据字典和优化器的改进,需重新评估执行计划。
  3. 备份与测试
    • 升级前务必备份数据,并在测试环境验证。

总结

MySQL 8.0 在性能、安全性、功能扩展性方面均有显著提升,建议新项目直接使用 8.0 版本。对于现有 5.7 系统,需根据业务需求评估升级成本和收益,确保兼容性和稳定性。

Logo

2万人民币佣金等你来拿,中德社区发起者X.Lab,联合德国优秀企业对接开发项目,领取项目得佣金!!!

更多推荐