MySQL8.0与MySQL5.7的区别详解
作者:hzsnone
1.隐藏索引
隐藏索引的特性对于性能调试非常有用,在8.0 中,索引可以被隐藏和显示,当一个索引隐藏时,他不会被查询优化器所使用,性能调试使用;
隐藏索引
ALTER TABLE t ALTER INDEX i INVISIBLE; #例子 ALTER table public_fund_announce ALTER INDEX idx_fund_id INVISIBLE;
恢复索引
ALTER TABLE t ALTER INDEX i VISIBLE;
2.用户创建,修改和授权
默认 身份认证的插件是caching_sha2_password,需要对应的客户端才能登陆,如果需要兼容,可以在设置密码时 加入WITH mysql_native_password;
并且创建用户与授权需要分开执行;
例如
create user dbadmin@'%' identified WITH mysql_native_password by '密码'; alter user dbadmin@'%' identified WITH mysql_native_password by '密码'; flush privileges;
3.设置持久化
MySQL 的设置可以在运行时通过 SET GLOBAL 命令来更改,但是这种更改只会临时生效,到下次启动时数据库又会从配置文件中读取。
MySQL 8 新增了 SET PERSIST 命令,例如:
SET PERSIST max_connections = 500;
MySQL 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。
4.UTF-8编码
从 MySQL 8 开始,数据库的缺省编码将改为 utf8mb4,这个编码包含了所有 emoji 字符;
5.通用表表达式(Common Table Expressions)
复杂的查询会使用嵌入式表,例如:
SELECT t1.*, t2.* FROM (SELECT col1 FROM table1) t1, (SELECT col2 FROM table2) t2;
而有了 CTE,我们可以这样写:
WITH t1 AS (SELECT col1 FROM table1), t2 AS (SELECT col2 FROM table2) SELECT t1.*, t2.* FROM t1, t2;
这样看上去层次和区域都更加分明,改起来也更清晰的知道要改哪一部分。
这个特性在很多报表场景是很有用的,也是mysql优化的一个很重要特性。
6.参数变化
query_cahe参数已经不存在,设置会报错
binglog过期时间参数变更为
binlog_expire_logs_seconds = 432000
7.性能提升
官方表示速度比5.7快两倍,尤其在工作负载高,高竞争时间时;待测试验证,查询count确实有一定提升;
8.NoSQL文档支持
MySQL 从 5.7 版本开始提供 NoSQL 存储功能,目前在 8.0 版本中这部分功能也得到了更大的改进。该项功能消除了对独立的 NoSQL 文档数据库的需求,而 MySQL 文档存储也为 schema-less 模式的 JSON 文档提供了多文档事务支持和完整的 ACID 合规性。
9.窗口函数
在这里创建了名为 w 的 window,规定它对 stu_count 字段进行排序,然后在 select 子句中对 w 执行 rank() 方法,将结果输出为 rank 字段。
10.其他
提供授权角色概念,可以把权限授权给role,然后把角色给到指定用户,方便权限细化管理。
参考官方文档:https://docs.oracle.com/cd/E17952_01/mysql-8.0-en/mysql-nutshell.html
参考其他:https://www.php.cn/mysql-tutorials-464447.html
到此这篇关于MySQL8.0与MySQL5.7区别的文章就介绍到这了,更多相关MySQL8.0与MySQL5.7区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!