MySQL 8.0 引入了许多新特性和改进,旨在提升性能、安全性和易用性。以下是一些主要的新特性:
1. 默认字符集和排序规则
- 默认字符集:MySQL 8.0 的默认字符集从
latin1
更改为utf8mb4
,支持更多的字符和表情符号。 - 排序规则:默认排序规则从
utf8_general_ci
更改为utf8mb4_0900_ai_ci
,提高了排序的准确性和性能。
2. 窗口函数(Window Functions)
- 窗口函数:MySQL 8.0 引入了窗口函数,如
ROW_NUMBER()
,RANK()
,DENSE_RANK()
,LEAD()
,LAG()
等,使得复杂的查询变得更加简单和高效。
3. 不可见索引(Invisible Indexes)
- 不可见索引:可以通过
ALTER TABLE ... ALTER INDEX ... INVISIBLE
使索引对查询优化器不可见,用于性能调试和优化。
4. 降序索引(Descending Indexes)
- 降序索引:支持在创建索引时指定降序排列,如
INDEX idx (col1 DESC)
。
5. 持久化变量(Persisted Variables)
- 持久化变量:使用
SET PERSIST
命令可以将系统变量持久化到配置文件中,重启后仍然有效。
6. 资源组(Resource Groups)
- 资源组:可以为不同的线程分配不同的 CPU 资源,提高资源管理和性能优化。
7. 数据库粒度只读(Database-Level Read-Only)
- 数据库粒度只读:可以通过
ALTER DATABASE ... READ ONLY = 1
设置数据库级别的只读模式。
8. 克隆插件(Clone Plugin)
- 克隆插件:支持从本地或远程克隆数据,简化了数据备份和恢复的过程。
9. 快速加列(Instant Add Column)
- 快速加列:支持在线快速添加列,只需修改元数据,大大减少了大表加列所需的时间。
10. 隐藏主键(Hidden Primary Key)
- 隐藏主键:可以通过
sql_generate_invisible_primary_key
参数为没有显式设置主键的表创建一个隐式的主键。
11. 优化的全文搜索(Improved Full-Text Search)
- 全文搜索:支持 n-gram 全文解析器,提高了全文搜索的灵活性和性能。
12. 通用表表达式(Common Table Expressions, CTE)
- CTE:支持递归和非递归的 CTE,使得复杂的查询更加清晰和易于管理。
13. 优化的 DDL 操作(Optimized DDL Operations)
- DDL 操作:支持原子化的 DDL 操作,确保了数据的一致性和完整性。
14. 增强的安全性(Enhanced Security)
- 角色管理:引入了角色管理功能,简化了权限管理。
- 密码策略:支持更严格的密码策略,增强了安全性。
15. 性能增强(Performance Enhancements)
- 并行 DDL:支持并行 DDL 操作,提高了索引创建和删除的速度。
- 双写缓冲区改进:改进了双写缓冲区(doublewrite buffer),提高了性能和可靠性。
16. 其他改进
- binlog 事务压缩:支持使用 zstd 算法压缩 binlog 事务,减少了磁盘空间占用。
- 分区表的改进:支持更多的分区类型和优化的分区管理。
- GIS 增强:支持地理和空间参考系统(SRS),增强了 GIS 功能。