MySQL 5.7与8.0版本区别详解

十念  论坛元老 | 2025-3-29 10:57:37 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1613|帖子 1613|积分 4839

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 性能改进

1.1 窗口函数(Window Functions)



  • MySQL 8.0

    • 支持窗口函数,如 ROW_NUMBER()、RANK()、DENSE_RANK()、LEAD()、LAG() 等。
    • 示例:
      1. SELECT id, value, ROW_NUMBER() OVER (PARTITION BY category ORDER BY value DESC) AS rank
      2. FROM my_table;
      复制代码
    • 窗口函数可以简化复杂查询,制止多层嵌套子查询。

  • MySQL 5.7

    • 不支持窗口函数,需通过子查询或复杂 JOIN 实现雷同功能。

1.2 通用表表达式(CTE)



  • MySQL 8.0

    • 支持递归和非递归的通用表表达式(CTE)。
    • 示例:
      1. WITH RECURSIVE cte AS (
      2.     SELECT 1 AS n
      3.     UNION ALL
      4.     SELECT n + 1 FROM cte WHERE n < 10
      5. )
      6. SELECT * FROM cte;
      复制代码
    • CTE 进步复杂查询的可读性和维护性。

  • MySQL 5.7

    • 不支持 CTE。

1.3 索引优化



  • MySQL 8.0

    • 支持 隐蔽索引(Invisible Indexes),可以暂时禁用索引而不删除。
      1. ALTER TABLE my_table ALTER INDEX idx_name INVISIBLE;
      复制代码
    • 支持 降序索引(Descending Indexes),优化 ORDER BY column DESC 查询。
      1. 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())。
      1. 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 插件,提供更强的密码加密。
    • 注意:旧客户端可能不兼容,需升级或显式修改插件:
      1. ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
      复制代码

  • MySQL 5.7

    • 默认使用 mysql_native_password 插件。

3.2 角色管理



  • MySQL 8.0

    • 支持角色(Roles),简化权限管理。
      1. CREATE ROLE 'read_only';
      2. GRANT SELECT ON db.* TO 'read_only';
      3. GRANT 'read_only' TO 'user'@'host';
      复制代码

  • MySQL 5.7

    • 需手动分配权限,无角色支持。

3.3 密码战略



  • MySQL 8.0

    • 支持密码逾期战略、密码复用限定、密码强度检查等。
      1. 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 和线程优先级。
      1. CREATE RESOURCE GROUP my_group TYPE = USER VCPU = 0-1 THREAD_PRIORITY = 5;
      2. 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_type、innodb_file_format)。
    • 新增参数(如 innodb_dedicated_server 自动设置 InnoDB 内存)。

  • MySQL 5.7

    • 使用旧参数,需手动调优。


9. 备份与恢复



  • MySQL 8.0

    • 支持 备份锁(Backup Lock),允许在线备份期间实行 DML 操作(仅壅闭 DDL)。
      1. LOCK INSTANCE FOR BACKUP;
      2. UNLOCK INSTANCE;
      复制代码

  • MySQL 5.7

    • 无备份锁功能。


10. 移除的功能



  • MySQL 8.0

    • 移除 Query Cache(查询缓存),因多核扩展性题目。
    • 移除 password() 函数,改用 SHA2 加密。

  • MySQL 5.7

    • 支持 Query Cache 和 password() 函数。


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 同等)。
    • 支持 NOWAIT 和 SKIP LOCKED 选项,优化锁竞争场景。
      1. SELECT * FROM my_table FOR UPDATE NOWAIT;
      复制代码

  • MySQL 5.7

    • 不支持 NOWAIT 和 SKIP LOCKED。


15. 版本支持



  • MySQL 5.7

    • 已于 2023 年 10 月结束标准支持,进入扩展支持阶段。

  • MySQL 8.0

    • 是当前推荐版本,持续获得功能更新和安全补丁。


升级注意事项


  • 兼容性题目

    • 检查客户端是否支持 caching_sha2_password。
    • 确保应用代码兼容 MySQL 8.0 的关键字和保留字厘革(如 RANK、SYSTEM)。

  • 性能调优

    • 由于数据字典和优化器的改进,需重新评估实行筹划。

  • 备份与测试

    • 升级前务必备份数据,并在测试环境验证。


总结

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

十念

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表