梦见你的名字 发表于 2024-9-28 12:35:03

MySQL 8.0 全新特性详解

https://i-blog.csdnimg.cn/blog_migrate/dd9a7ec60d77ad61ba7cb96088f3c936.png
MySQL 8.0带来了许多令人兴奋的新特性和优化功能,下面我将逐一详细介绍每个特性:
一、原生数据字典

MySQL 8.0 引入了原生数据字典,代替了之前使用的.frm、.par、.opt等文件来存储元数据。这一改进使得元数据的访问和管理更加高效和直接。原生数据字典提供了对数据库对象元数据的统一视图,从而简化了数据库的管理和维护工作。通过查询数据字典,管理员可以快速相识数据库的结构、属性以及对象之间的关系,提高数据库的可维护性。
要启用此功能,请在my.cnf设置文件中添加以下设置:
data-encryption-key-store = KEYSTOREdata-encryption-key-store-type = FILEdata-encryption-key-store-file-path = /path/to/keystore.txt

二、脚色管理

MySQL 8.0 加强了脚色管理功能,答应管理员创建和管理脚色,并为每个脚色分配特定的权限。这使得权限管理变得更加灵活和便捷。通过脚色管理,管理员可以将一组权限打包成一个脚色,然后将该脚色分配给多个用户,从而简化了权限的分配和回收过程。同时,脚色管理还提供了权限继承、脚色组合等高级功能,进一步加强了权限管理的灵活性和安全性。
通过以下命令创建脚色:
CREATE ROLE 'role_name'; 然后,您可以使用GRANT语句为脚色分配权限:
GRANT SELECT, INSERT ON database_name.table_name TO 'role_name'; 末了,将脚色分配给用户:
ALTER USER 'user_name'@'localhost' ADD ROLE 'role_name';
三、窗口函数

MySQL 8.0 加入了窗口函数支持,如ROW_NUMBER()、RANK()、DENSE_RANK()等。窗口函数答应用户在查询中对数据集进行窗口分析,实行更复杂的计算任务。这使得MySQL在数据处理和分析方面的能力得到了明显提升。通过窗口函数,用户可以轻松地计算移动平均值、累计总和等,实现更高级的数据分析需求。
窗口函数有点像是 SUM()、COUNT() 那样的集合函数,但它并不会将多行查询结果合并为一行,而是将结果放回多行当中。也就是说,窗口函数是不必要 GROUP BY 的。
假设我们有一张 “班级门生人数” 表:​​​​​​​
mysql> select * from classes;+--------+-----------+| name   | stu_count |+--------+-----------+| class1 |      31 || class2 |      33 || class3 |      52 || class4 |      53 || class5 |      57 |+--------+-----------+5 rows in set (0.00 sec) 如果我要对班级人数从小到大进行排名,可以这样利用窗口函数:​​​​​​​
mysql> select *, rank() over w as `rank` from classes    -> window w as (order by stu_count);+--------+-----------+------+| name   | stu_count | rank |+--------+-----------+------+| class5 |      57 |    1 || class1 |      31 |    2 || class2 |      33 |    3 || class3 |      52 |    4 || class4 |      53 |    4 |+--------+-----------+------+5 rows in set (0.00 sec) 在这里我们创建了名为 w 的 window,规定它对 stu_count 字段进行排序,然后在 select 子句中对 w 实行 rank() 方法,将结果输出为 rank 字段。
其实,window 的创建是可选的。例如我要在每一行中加入门生总数,则可以这样:​​​​
mysql> select *, sum(stu_count) over() as total_count    -> from classes;+--------+-----------+-------------+| name   | stu_count | total_count |+--------+-----------+-------------+| class1 |      31 |         235 || class2 |      33 |         235 || class3 |      52 |         235 || class4 |      53 |         235 || class5 |      57 |         235 |+--------+-----------+-------------+5 rows in set (0.00 sec)
四、加强的JSON支持

MySQL 8.0 对JSON的支持进行了进一步加强,引入了JSON数据范例和一系列内置函数。JSON数据范例答应用户在列中直接存储JSON数据,提高了数据的灵活性和可读性。同时,MySQL 8.0还提供了一系列内置函数,如JSON_EXTRACT()、JSON_ARRAY()、JSON_OBJECT()等,用于提取、利用和验证JSON数据。这使得MySQL能够更好地处理非结构化数据,满足日益增长的数据处理需求。
例如,插入JSON数据到表中:
INSERT INTO my_table (json_column) VALUES ('{"name": "John", "age": 30}'); 查询JSON数据:
SELECT JSON_EXTRACT(json_column, '$.name') AS name FROM my_table;
五、环球化与字符集

MySQL 8.0 默认采用utf8mb4字符集,提供了更完美的Unicode支持。这意味着MySQL 8.0可以更好地处理各种语言的数据,包括emoji字符等。同时,MySQL 8.0还加强了对差异语言、时区的支持,实现了更好的环球化。这使得MySQL成为了一个更加多语言、多文化的数据库管理系统,满足了环球化业务的需求。

六、性能与可扩展性提升

MySQL 8.0 针对InnoDB存储引擎进行了多方面的优化,包括I/O负载、元数据利用等。这些优化使得MySQL 8.0在性能和可扩展性方面有了明显提升。无论是处理大规模数据还是应对高并发场景,MySQL 8.0都能表现精彩。同时,MySQL 8.0还提供了更多的设置选项和调优工具,资助管理员更好地管理和优化数据库性能。

七、redo log重构

MySQL 8.0对redo log进行了重构,去掉了之前的锁机制,采用了区间的方式来保证数据的一致性。这种改进使得redo log的写入更加高效,提高了整体的运行效率。同时,MySQL 8.0还引入了Link_buf数据结构,使得整个模块变成了Lock_free的模式,进一步提升了性能。这种无锁化的重构使得差异的线程在写入redo_log_buffer时得以并行写入,从而提高了数据库的并发性能。

八、更轻巧的NoSQL支持

随着非关系型数据库和数据存储的兴起,MySQL 8.0也对NoSQL支持进行了优化。它不再依靠模式(schema),以更灵活的方式实现NoSQL功能,从而满足用户在数据处理方面的多样化需求。这使得MySQL能够更好地适应差异的应用场景,提供了更广泛的数据存储和查询选项。

九、更好的索引

MySQL 8.0新增了潜伏索引和降序索引等特性。潜伏索引可以用来测试去掉索引对查询性能的影响,资助管理员找到最佳的索引战略。而降序索引则可以提高查询的效率,特殊是对于必要按照降序分列的查询场景。这些索引优化使得MySQL在查询性能方面有了明显提升。
潜伏一个索引的语法是:
ALTER TABLE t ALTER INDEX i INVISIBLE; 恢复显示该索引的语法是:
ALTER TABLE t ALTER INDEX i VISIBLE; 当一个索引被潜伏时,我们可以从 show index 命令的输出中看到,该索引的 Visible 属性值为 NO。
注意:当索引被潜伏时,它的内容仍然是和正常索引一样实时更新的,这个特性自己是专门为优化调试使用。如果你恒久潜伏一个索引,那还不如干脆删掉,因为毕竟索引的存在会影响插入、更新和删除的性能。

十、设置持久化

MySQL 8.0新增了SET PERSIST命令,答应用户将设置持久化到数据目次下的mysqld-auto.cnf文件中。这样,即使数据库重启,之前的设置也会得到保存,从而简化了设置管理的工作。这使得管理员可以更加方便地管理和调整数据库的设置,提高了数据库的可维护性。
利用 SET PERSIST 命令,例如:
SET PERSIST max_connections = 500; MySQL 会将该命令的设置保存到数据目次下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,用其中的设置来覆盖缺省的设置文件。

总结

总的来说,MySQL 8.0的这些新特性在数据管理、安全性、性能优化等多个方面进行了改进,为用户提供了更加高效、灵活和安全的数据库管理系统。无论是处理大规模数据、应对高并发场景还是满足多样化的数据处理需求,MySQL 8.0都能提供精彩的支持。

https://i-blog.csdnimg.cn/blog_migrate/661bb25afe676d5c59ce9ae3d30bff72.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL 8.0 全新特性详解