MySQL5.X和8.0有什么区别?

简介: MySQL 8.0 相比 5.7 性能提升显著,支持 NoSQL、窗口函数、CTE、降序索引与隐藏索引,增强 JSON 处理,取消查询缓存以优化性能,默认使用 utf8mb4 编码,提升安全性、可靠性与高可用性,全面支持 ACID 事务和原子 DDL 操作。
  1. 性能:MySQL 8.0 的速度比 MySQL 5.7 快 2 倍,在读/写工作负载、IO 密集型工作负载和高竞争(“hot spot”热点竞争)工作负载方面表现更好。
  2. NoSQL:MySQL 从 5.7 版本开始提供 NoSQL 存储功能,8.0 版本进一步改进,消除了对独立 NoSQL 文档数据库的需求,支持无模式(schema-less)的 JSON 文档,提供多文档事务和完整的 ACID 合规性。
  3. 窗口函数:MySQL 8.0 引入了窗口函数,可以实现新的查询方式。窗口函数与聚合函数(如 SUM()、COUNT())类似,但不会将多行合并为一行,而是将结果保留在多行中,无需使用 GROUP BY。
  4. 隐藏索引:在 MySQL 8.0 中,索引可以“隐藏”或“显示”。隐藏的索引不会被查询优化器使用,可用于性能调试。通过隐藏索引观察数据库性能变化,判断索引是否有用,从而决定是否删除。
  5. 取消查询缓存:MySQL 8.0 出于性能和可维护性考虑取消了查询缓存,转而使用索引、更好的查询计划优化和缓存结果集,更有效地提高查询性能,避免查询缓存可能带来的问题。
  6. SELECT FOR UPDATE 支持 NOWAIT:当其他事务锁定某些行时,当前事务会等待锁释放。使用 NOWAIT 关键字后,如果行已被锁定,数据库会立即抛出错误,而不是等待。
  7. 降序索引:MySQL 8.0 支持按降序方式排序的索引,索引中的值也会按降序排列。
  8. 通用表表达式:在复杂查询中使用嵌入式表时,CTE 使查询语句更清晰。
  9. UTF-8 编码:从 MySQL 8 开始,默认字符集改为 utf8mb4。
  10. JSON 支持:MySQL 8 大幅改进对 JSON 的支持,新增 JSON_EXTRACT() 函数用于从 JSON 字段中抽取数据,以及 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数用于组合数据到 JSON 数组和对象中。
  11. 可靠性:InnoDB 现在支持表 DDL 操作的原子性,使 InnoDB 表的数据定义语言具备事务完整性,能够保证操作要么成功提交,要么失败回滚,避免出现 DDL 操作部分成功的问题。同时,还支持 crash-safe 特性,元数据存储在单一事务数据字典中。
  12. 高可用性:InnoDB 集群为数据库提供集成式的原生高可用性解决方案。
  13. 安全性:包括对 OpenSSL 的改进、新的默认身份验证机制、SQL 角色管理、密码强度控制及授权方面的增强。
目录
相关文章
|
3月前
|
JSON 安全 JavaScript
深入浅出解析 HTTPS 原理
HTTPS是HTTP与SSL/TLS结合的安全协议,通过数字证书验证身份,利用非对称加密安全交换会话密钥,再以对称加密高效传输数据,确保通信的机密性、完整性和真实性。整个过程如同建立一条加密隧道,保障网络交互安全。
1886 16
|
3月前
|
SQL 架构师 关系型数据库
【Java架构师体系课 | MySQL篇】⑤ 索引优化实战一
本文深入解析MySQL索引优化原理,涵盖联合索引使用、覆盖索引、索引下推、filesort排序机制及trace工具分析执行计划选择等内容,并结合实际案例提供索引设计原则与SQL优化策略。
177 5
|
3月前
|
存储 缓存 关系型数据库
为什么MySQL会选错索引,如何解决?
InnoDB索引选择由优化器基于成本决策,受基数性、选择性、索引覆盖等因素影响。统计信息不准或复杂查询可能导致选错索引,可通过ANALYZE TABLE更新统计、FORCE INDEX强制索引或优化查询和配置来解决。
228 5
|
3月前
|
关系型数据库 MySQL Java
【Java架构师体系课 | MySQL篇】⑦ 深入理解MySQL事务隔离级别与锁机制
本文深入讲解数据库事务隔离级别与锁机制,涵盖ACID特性、并发问题(脏读、不可重复读、幻读)、四种隔离级别对比及MVCC原理,分析表锁、行锁、间隙锁、临键锁等机制,并结合实例演示死锁处理与优化策略,帮助理解数据库并发控制核心原理。
494 4
|
3月前
|
SQL 存储 缓存
【Java架构师体系课 | MySQL篇】① 全面理解MySQL架构设计
本文详解MySQL一条SQL查询与更新语句的执行流程,涵盖连接器、分析器、优化器、执行器及存储引擎层协作机制,并深入解析redo log与binlog日志如何通过两阶段提交保障数据一致性与恢复能力。
221 2
|
3月前
|
SQL Java 数据库
Spring事务学习总结
Spring通过`@Transactional`注解实现事务管理,应用于Service层,支持事务的开启、提交与回滚。支持多种事务属性,如回滚规则、传播行为等,常用传播行为为REQUIRED和REQUIRES_NEW,确保数据一致性与业务逻辑隔离。
202 2
|
3月前
|
druid Java 数据库连接
【Java架构必看】Mybatis用的什么连接池?
Mybatis内置Pooled、Unpooled和JNDI三种数据源,支持连接池的Pooled性能有限,存在空闲资源占用、调优困难和连接泄漏等问题。因此推荐使用更成熟的第三方数据源如Hikari、Druid等,以提升系统稳定性和性能。
131 0
|
3月前
|
存储 人工智能 安全
做了半年自动化后,我才发现飞书多维表格解决的不是表格问题
飞书多维表格是自动化利器,无需代码即可实现数据收集、存储与流程触发。它与n8n无缝对接,表单提交自动触发工作流,数据实时同步,既是起点也是终点,真正实现高效协作与全自动处理,让复杂变简单。
|
3月前
|
消息中间件 架构师 Java
【Java架构师】各个微服务之间有哪些调用方式?
微服务拆分后需跨进程通信,常见方式包括HTTP调用(如RESTful、OpenFeign、@HttpExchange)、RPC框架(如Dubbo、gRPC、Thrift)、消息队列(如Kafka、RabbitMQ)及服务网格(如Istio)。不同场景下可依据性能、异步、跨语言等需求选择合适方案。
728 0
|
3月前
|
安全 Linux 网络安全
收集CentOS使用中的基础命令集锦
这些基础命令构成了CentOS管理中的骨架,熟练掌握这些命令对维护与管理系统至关重要。每个命令都具备丰富的参数选项,为了充分利用它们的功能,建议通过 `man`命令(例如 `man ls`)查看命令的手册页获取详细信息。
178 14

热门文章

最新文章