十念 发表于 2025-3-29 10:57:37

MySQL 5.7与8.0版本区别详解

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_type、innodb_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 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 选项,优化锁竞争场景。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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL 5.7与8.0版本区别详解