MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

发布时间:2022-06-26 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了MySQL8.0新特性抢先看,性能又双叒提升了,真香啊脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
👨‍🎓 博主介绍:
IT邦德,江湖人称jeames007,10年DBA工作经验
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(WebjavaPython)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBaseTDSQL数据库、国产达梦数据库以及红帽子认证

擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,
安装迁移,性能优化、故障应急处理等。

文章目录

  • 前言
    • 🍁 一、隐藏索引
      • 🍃 1.1 操作语句
      • 🍃 1.2 注意事项
    • 🍁 二、参数设置持久化
      • 🍃 2.1 SET PERSIST 命令
      • 🍃 2.2 数据字典查询
      • 🍃 2.3 持久化清除
      • 🍃 2.4 原理
    • 🍁 三、UTF-8 编码
    • 🍁 四、表达式WITH
      • 🍃 4.1 生成日期序列
      • 🍃 4.2 多个表达式来 JOIN
    • 🍁 五、窗口函数
      • 🍃 5.1 新特性
      • 🍃 5.2 建表
      • 🍃 5.3 排序对比

前言

官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能!本文做了详细阐述

🍁 一、隐藏索引

隐藏索引的特性对于性能调试非常有用。 在 8.0 中,索引可以被“隐藏”和“显示”。当一个索引隐藏时,它不会被查询优化器所使用。 也就是说,我们可以隐藏一个索引,然后观察对数据库的影响。 如果数据库性能有所下降,就说明这个索引是有用的,于是将其“恢复显示”即可; 如果数据库性能看不出变化,说明这个索引是多余的,可以删掉了。

🍃 1.1 操作语句

创建索引的语法: alter table t_index add index idx_col3(col3);

隐藏一个索引的语法: mysql> ALTER TABLE t_index ALTER INDEX idx_col3 INVISIBLE;

恢复显示该索引的语法: mysql> ALTER TABLE t_index ALTER INDEX idx_col3 VISIBLE;

Visible 属性: mysql> show index from t_index;

MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

🍃 1.2 注意事项

当索引被隐藏时,它的内容仍然是和正常索引一样实时更新的, 这个特性本身是专门为优化调试使用。 如果你长期隐藏一个索引,那还不如干脆删掉, 因为毕竟索引的存在会影响插入、更新和删除的性能。

🍁 二、参数设置持久化

MySQL 的设置可以在运行时通过 SET GLOBAL 命令来更改, 但是这种更改只会临时生效,到下次启动时数据库又会从配置文件中读取。

🍃 2.1 SET PERSIST 命令

MySQL 8 新增了 SET PERSIST 命令,例如: mysql> set persist max_connections=300;

MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

🍃 2.2 数据字典查询

mysql> SELECT * FROM performance_schema.persisted_variables;

MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

🍃 2.3 持久化清除

对于已经持久化了变量,可通过 reset persist 命令清除掉, 注意,其只是清空 mysqld-auto.cnf 和 performance_schema.persisted_variables 中的内容, 对于已经修改了的变量的值,不会产生影响。 mysql> reset persist;

MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

🍃 2.4 原理

MySQL 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中, 下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。 不建议手动修改该文件,因为其内容是 json 格式的, 其有可能导致数据库在启动过程中因解析错误而失败

🍁 三、UTF-8 编码

从 MySQL 8 开始,数据库的缺省编码将改为 utf8mb4,这个编码包含了所有 emoji 字符。 多少年来我们使用 MySQL 都要在编码方面小心翼翼, 生怕忘了将缺省的 latin 改掉而出现乱码问题。从此以后就不用担心了。

– 创建数据库 mysql> CREATE DATABASE mes_db charset utf8mb4;

🍁 四、表达式WITH

其实 WITH 表达式除了和 SELECT 一起用,有很多的组合: insert with 、with update、with delete、with with、with recursive (可以模拟数字、日期等序列)、WITH 可以定义多张表

🍃 4.1 生成日期序列

WITH recursive seq_date (log_date) AS
(SELECT
'2022-01-01'
UNION
ALL
SELECT
log_date + INTERVAL 1 DAY
FROM
seq_date
WHERE log_date + INTERVAL 1 DAY < '2022-01-14')
SELECT
log_date
FROM
seq_date;
+------------+
| log_date   |
+------------+
| 2022-01-01 |
| 2022-01-02 |
| 2022-01-03 |
| 2022-01-04 |
| 2022-01-05 |
| 2022-01-06 |
| 2022-01-07 |
| 2022-01-08 |
| 2022-01-09 |
| 2022-01-10 |
| 2022-01-11 |
| 2022-01-12 |
| 2022-01-13 |
+------------+
13 rows in set (0.00 sec)

🍃 4.2 多个表达式来 JOIN

复杂的查询会使用嵌入式表,例如: 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; 这样看上去层次和区域都更加分明,改起来也更清晰的知道要改哪一部分。

🍁 五、窗口函数

🍃 5.1 新特性

MySQL 被吐槽最多的特性之一就是缺少 rank() 函数, 当需要在查询当中实现排名时,必须手写 @ 变量。但是从 8.0 开始, MySQL 新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。 窗口函数有点像是 SUM()、COUNT() 那样的集合函数, 但它并不会将多行查询结果合并为一行,而是将结果放回多行当中。 也就是说,窗口函数是不需要 GROUP BY 的。

🍃 5.2 建表

create table scores_tb (
id int auto_increment primary key,
xuehao int not null,
score int not null
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert into scores_tb 
(xuehao,score) 
values (1001,89),
(1002,99),
(1003,96),
(1004,96),
(1005,92),
(1006,90),
(1007,90),
(1008,94);
select * from scores_tb;

🍃 5.3 排序对比

按分数高低直接排名,从 1 开始,往下排,类似于 row number

5.7版本SQL如下: SELECT xuehao, score, @curRank := @curRank + 1 AS rank FROM scores_tb, ( SELECT @curRank := 0 ) r ORDER BY score desc;

8.0版本 select xuehao,score, ROW_NUMBER() OVER(order by score desc) as row_r from scores_tb;

MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

大家点赞、收藏、关注、评论啦 👇🏻👇🏻👇🏻微信公众号👇🏻👇🏻👇🏻

脚本宝典总结

以上是脚本宝典为你收集整理的MySQL8.0新特性抢先看,性能又双叒提升了,真香啊全部内容,希望文章能够帮你解决MySQL8.0新特性抢先看,性能又双叒提升了,真香啊所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:数据库