MySQL5.X和8.0有什么区别?
简介:
MySQL 8.0 相比 5.7 性能提升显著,支持 NoSQL、窗口函数、CTE、降序索引与隐藏索引,增强 JSON 处理,取消查询缓存以优化性能,默认使用 utf8mb4 编码,提升安全性、可靠性与高可用性,全面支持 ACID 事务和原子 DDL 操作。
- 性能:MySQL 8.0 的速度比 MySQL 5.7 快 2 倍,在读/写工作负载、IO 密集型工作负载和高竞争(“hot spot”热点竞争)工作负载方面表现更好。
- NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,8.0 版本进一步改进,消除了对独立 NoSQL 文档数据库的需求,支持无模式(schema-less)的 JSON 文档,提供多文档事务和完整的 ACID 合规性。
- 窗口函数:MySQL 8.0 引入了窗口函数,可以实现新的查询方式。窗口函数与聚合函数(如 SUM()、COUNT())类似,但不会将多行合并为一行,而是将结果保留在多行中,无需使用 GROUP BY。
- 隐藏索引:在 MySQL 8.0 中,索引可以“隐藏”或“显示”。隐藏的索引不会被查询优化器使用,可用于性能调试。通过隐藏索引观察数据库性能变化,判断索引是否有用,从而决定是否删除。
- 取消查询缓存:MySQL 8.0 出于性能和可维护性考虑取消了查询缓存,转而使用索引、更好的查询计划优化和缓存结果集,更有效地提高查询性能,避免查询缓存可能带来的问题。
- SELECT FOR UPDATE 支持 NOWAIT:当其他事务锁定某些行时,当前事务会等待锁释放。使用 NOWAIT 关键字后,如果行已被锁定,数据库会立即抛出错误,而不是等待。
- 降序索引:MySQL 8.0 支持按降序方式排序的索引,索引中的值也会按降序排列。
- 通用表表达式:在复杂查询中使用嵌入式表时,CTE 使查询语句更清晰。
- UTF-8 编码:从 MySQL 8 开始,默认字符集改为 utf8mb4。
- JSON 支持:MySQL 8 大幅改进对 JSON 的支持,新增 JSON_EXTRACT() 函数用于从 JSON 字段中抽取数据,以及 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数用于组合数据到 JSON 数组和对象中。
- 可靠性:InnoDB 现在支持表 DDL 操作的原子性,使 InnoDB 表的数据定义语言具备事务完整性,能够保证操作要么成功提交,要么失败回滚,避免出现 DDL 操作部分成功的问题。同时,还支持 crash-safe 特性,元数据存储在单一事务数据字典中。
- 高可用性:InnoDB 集群为数据库提供集成式的原生高可用性解决方案。
- 安全性:包括对 OpenSSL 的改进、新的默认身份验证机制、SQL 角色管理、密码强度控制及授权方面的增强。