大厂面试题:MySQL 5.x和8.0有什么区别?

MySQL 5.x 和 MySQL 8.0 主要区别

MySQL 8.0 相比 MySQL 5.7 进行了大量改进,涵盖了性能优化、SQL 功能增强、索引优化、JSON 支持、安全性提升等多个方面。

1. 性能优化

✅ MySQL 8.0 性能比 5.7 提高 2 倍

MySQL 8.0 在以下方面优化了性能:

  • 更好的读/写并发性能(改进 InnoDB 并发控制)。
  • 改进 IO 密集型工作负载(减少磁盘 IO,优化 Buffer Pool)。
  • 热点竞争优化(降低全局锁争用,提高事务处理能力)。

📌 结论:MySQL 8.0 对高并发、高 IO 负载的场景优化明显。

2. NoSQL 支持

✅ 提供更完善的 JSON 存储

  • MySQL 5.7 引入了 JSON 数据类型,但功能有限。
  • MySQL 8.0增强了 JSON 支持:

JSON_TABLE():可以将 JSON 解析为表结构进行查询。

JSON_ARRAYAGG()、JSON_OBJECTAGG():对 JSON 进行聚合运算。

JSON_EXTRACT():从 JSON 中提取数据。

📌 结论:MySQL 8.0 提供了更完善的 JSON 处理能力,适用于 NoSQL + 关系型混合存储场景。

3. SQL 语法增强

✅ 窗口函数(Window Functions)

MySQL 8.0 支持窗口函数(如 RANK()、DENSE_RANK()、ROW_NUMBER() 等),可用于按窗口范围进行排序、聚合计算。

示例:

SELECT id, name, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank
FROM employees;

📌 结论:MySQL 8.0 窗口函数可以实现更复杂的数据分析计算,而 MySQL 5.7 只能通过子查询或 GROUP BY 处理。

✅ 公用表表达式(CTE - Common Table Expressions)

MySQL 8.0 支持 CTE,可以避免复杂查询中的嵌套子查询,提高 SQL 可读性。

示例:

WITH cte AS (
    SELECT id, name, department FROM employees WHERE salary > 5000
)
SELECT * FROM cte WHERE department = 'IT';

📌 结论:MySQL 8.0 使用 CTE 让 SQL 逻辑更清晰,可读性更强。

✅ SELECT FOR UPDATE 支持 NOWAIT / SKIP LOCKED

  • MySQL 5.7:当某行被锁定时,查询会一直等待。
  • MySQL 8.0:NOWAIT:如果行被锁定,则立即报错,不等待。

SKIP LOCKED:跳过已锁定的行,不等待。

📌 结论:MySQL 8.0 优化了行锁机制,适合高并发并行任务的处理。

新机会跳板

大厂核心部门岗,前、后端or测试>直>通>机>会

4. 索引优化

✅ 隐藏索引(Invisible Indexes)

MySQL 8.0 允许索引“隐藏” ,而不删除索引:

ALTER TABLE employees ALTER INDEX emp_name_idx INVISIBLE;

📌 结论:隐藏索引可以测试某个索引是否影响查询性能,避免误删索引导致查询变慢。

✅ 降序索引(Descending Index)

MySQL 8.0 支持降序索引,比 MySQL 5.7 需要额外排序(ORDER BY DESC)更高效:

CREATE INDEX emp_salary_desc_idx ON employees (salary DESC);

📌 结论:MySQL 8.0 索引支持 DESC,提升 ORDER BY 性能。

5. 可靠性增强

✅ InnoDB 表 DDL 事务化

MySQL 8.0 支持 DDL 事务,可保证 DDL 语句执行的原子性:

  • MySQL 5.7:DDL 执行失败可能导致数据不完整。
  • MySQL 8.0:DDL 失败可回滚,保证数据完整性。

📌 结论:MySQL 8.0 DDL 也支持事务,避免部分成功导致数据异常。

6. 高可用性(HA - High Availability)

✅ InnoDB 集群

MySQL 8.0 支持 InnoDB Group Replication,用于分布式高可用部署:

  • 自动主从切换(Failover) 。
  • 支持多主模式。

📌 结论:MySQL 8.0 原生支持高可用集群,无需手动配置主从复制。

7. 安全性增强

✅ 默认身份验证插件

MySQL 8.0 默认使用更安全的身份验证插件:

sql
CREATE USER 'user'@'%' IDENTIFIED WITH caching_sha2_password BY 'password';

📌 结论:MySQL 8.0 提升了数据库访问安全性。

8. 默认字符集

✅ utf8mb4 成为默认字符集

  • MySQL 5.7:默认 latin1,需要手动指定 utf8mb4。
  • MySQL 8.0:默认 utf8mb4,支持完整的 Unicode(如 Emoji 表情) 。

📌 结论:MySQL 8.0 默认支持 UTF-8,解决了字符集兼容问题。

9. 查询缓存

✅ MySQL 8.0 移除了查询缓存

  • MySQL 5.7:查询缓存存在严重的锁争用问题,影响并发性能。
  • MySQL 8.0:移除查询缓存,推荐使用 Redis、Memcached 进行缓存。

📌 结论:MySQL 8.0 取消查询缓存,提高并发查询性能。

总结:MySQL 5.x vs MySQL 8.0

✅ MySQL 8.0 提供了更高的性能、更丰富的 SQL 语法、更好的 JSON 支持、更安全的身份验证,是企业级数据库的首选! 🚀

——转载自:程序员飞鱼

#牛客在线求职答疑中心#
全部评论

相关推荐

06-12 10:50
门头沟学院 Java
你的不定积分没加C:我怎么在学院群看到了同样的话
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务