MySQL8.x新特性:与mysql5.x的版本区别
MySQL8.x新特性
1.与mysql5.x的区别:MySQL8.x新特性:与mysql5.x的版本区别-CSDN博客
2.窗口函数(Window Functions):MySQL8.x新特性:窗口函数(Window Functions)-CSDN博客
引言
MySQL是开源关系型数据库的代表,广泛应用于不同规模的Web和企业应用中。从MySQL5.x到MySQL8.x的升级带来了大量功能的改进和性能提升。
1.性能改进
1.1窗口函数(Window Functions)
MySQL8.x
支持窗口函数,窗口函数可以简化复杂查询,避免多层嵌套子查询,语法:
SELECT WINDOW_FUNCTION() OVER([PARTITION BY `字段1`, `字段2`, ...][ORDER BY `字段3`, `字段4`][FRAME_CLAUSE]) [AS `别名`]
FROM `表名` ;
MySQL5.x
不支持窗口函数,需通过子查询或复杂JOIN实现类似功能。
1.2公共表表达式(Common Table Expressions CTE)
MySQL8.x
支持递归和非递归的公共表表达式(CTE)。CTE提高复杂查询的可读性和维护性。语法:
WITH RECURSIVE cte_name AS
(SELECT ... <-- specifies initial setUNION ALLSELECT ... <-- specifies how to derive new rows
)
MySQL5.x
不支持CTE。
1.3索引优化
MySQL8.x
支持隐藏索引(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);
MySQL5.x
不支持隐藏锁芯和降序索引。
2.JSON功能增强
MySQL8.x
新增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数据的存储大小。
MySQL5.x
JSON功能较为基础,仅支持JSON_EXTRACT()、JSON_ARRAY()、JSON_OBJECT()等。
3.安全性改进
3.1默认身份验证插件
MySQL8.x
默认使用caching_sha2_password插件,提供更强的密码加密。
注意:旧客户端可能不兼容,需升级或显式修改插件:
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
MySQL5.x
默认使用mysql_native_password插件。
3.2角色管理
MySQL8.x
支持角色(Roles),简化权限管理。
CREATE ROLE 'read_only';
GRANT SELECT ON db.* TO 'read_only';
GRANT 'read_only' TO 'user'@'host';
MySQL5.x
需手动分配权限,无角色支持。
3.3密码策略
MySQL8.x
支持密码过期策略、密码复用限制、密码强度检查等。
SET GLOBAL validate_password.policy = STRONG;
MySQL5.x
需通过插件实现部分功能。
4.数据字典
MySQL8.x
重构数据字典,将系统表(如information_schema)存储在 InnoDB 引擎中。
支持原子 DDL 操作(Atomic DDL),DDL 操作要么完全成功,要么回滚。
MySQL5.x
数据字典存储在 MyISAM 表中,不支持原子 DDL。
5.字符集与编码
MySQL8.x
默认字符集从latin1改为utf8mb4,全面支持 Unicode(包括表情符号)。
支持utf8mb4_0900_ai_ci校对规则,提供更准确的排序和比较。
MySQL5.x
默认字符集为latin1,需手动修改为utf8mb4。
6.资源管理
MySQL8.x
支持资源组(Resource Groups),可限制 CPU 和线程优先级。
CREATE RESOURCE GROUP my_group TYPE = USER VCPU = 0-1 THREAD_PRIORITY = 5;
SET RESOURCE GROUP my_group FOR thread_id;
MySQL5.x
无此功能。
7.InnoDB 改进
MySQL8.x
支持原子DDL(Atomic DDL),DDL 操作要么完全成功,要么回滚。
自增列(AUTO_INCREMENT)持久化,重启后不会重置。
支持并行构建全文索引。
MySQL5.x
不支持原子 DDL 和自增列持久化。
8.配置参数变化
MySQL8.x
移除或弃用部分旧参数(如query_cache_type、innodb_cache_type、innodb_file_format)。
新增参数(如innodb_dedicated_server自动配置 InnoDB 内存)。
MySQL5.x
使用旧参数,需手动调优。
9.备份与恢复
MySQL8.x
支持备份锁(Backup Lock),允许在线备份期间执行 DML 操作(仅阻塞 DDL)。
LOCK INSTANCE FOR BACKUP;
UNLOCK INSTANCE;
MySQL5.x
无备份锁功能。
10.事务与隔离级别
MySQL8.x
默认事务隔离级别为REPEATABLE READ(与 5.7 一致)。
支持NOWAIT和SKIP LOCKED选项,优化锁竞争场景。
SELECT * FROM my_table FOR UPDATE NOWAIT;
MySQL5.x
不支持NOWAIT和SKIP LOCKED。
11.复制与高可用
MySQL8.x
增强 Group Replication(组复制)的性能和稳定性。
支持并行复制(基于 WriteSet 的多线程复制)。
默认启用二进制日志的校验和(binlog_checksum=CRC32)。
MySQL5.x
并行复制功能较弱。
12.优化器改进
MySQL8.x
支持 直方图统计(Histogram Statistics),提升复杂查询的执行计划选择。
支持 跳过索引扫描(Skip Scan Index Access)。
MySQL5.x
不支持直方图和跳过索引扫描。
13.性能模式(Performance Schema)
MySQL8.x
增强性能模式,支持更多监控指标(如事务、锁、内存使用等)。
MySQL5.x
性能模式功能较少。
14.移除的功能
MySQL8.x
移除Query Cache(查询缓存),因多核扩展性问题。
移除password()函数,改用 SHA2
加密
MySQL5.x
支持Query Cache和password()函数。
15.总结
特性 | MySQL5.x | MySQL8.x |
查询性能 | 较低 | 显著提升,支持窗口函数和并行查询 |
JSON 支持 | 基础支持 | 增强支持,支持 JSON 表函数 |
窗口函数 | 不支持 | 支持 |
CTE | 不支持 | 支持 |
角色管理 | 不支持 | 支持 |
默认身份验证插件 | mysql_native_password | caching_sha2_password |
原子 DDL | 不支持 | 支持 |
自增列持久化 | 不支持 | 支持 |
数据字典 | 文件存储 | InnoDB 表存储 |
默认字符集 | utf8 | utf8mb4 |