大厂面试题: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 支持、更安全的身份验证,是企业级数据库的首选! 🚀
——转载自:程序员飞鱼
#牛客在线求职答疑中心#