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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL8.0新特性抢先看,性能又双叒提升了,真香啊

一、隐藏索引



隐藏索引的特性对于性能调试非常有用。

在 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;

46d57c9fb9e84aebbeac1c8f11409f38.png



🍃 1.2 注意事项

当索引被隐藏时,它的内容仍然是和正常索引一样实时更新的,

这个特性本身是专门为优化调试使用。

如果你长期隐藏一个索引,那还不如干脆删掉,

因为毕竟索引的存在会影响插入、更新和删除的性能。


🍁 二、参数设置持久化


MySQL 的设置可以在运行时通过 SET GLOBAL 命令来更改,

但是这种更改只会临时生效,到下次启动时数据库又会从配置文件中读取。


🍃 2.1 SET PERSIST 命令


MySQL 8 新增了 SET PERSIST 命令,例如:

mysql> set persist max_connections=300;

534a46b321c946c28141efba9d136c9b.png



🍃 2.2 数据字典查询


mysql> SELECT * FROM performance_schema.persisted_variables;



0956090641314efc9d53cc12122ee47f.png


🍃 2.3 持久化清除


对于已经持久化了变量,可通过 reset persist 命令清除掉,

注意,其只是清空 mysqld-auto.cnf 和 performance_schema.persisted_variables 中的内容,

对于已经修改了的变量的值,不会产生影响。

mysql> reset persist;

46960adca4e544f7b99322ca43b250ab.png

🍃 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;

bcd5d275b0ba4e0f8e0a13dfe1e5cdb2.png

3db2201042e948c89a2f377f8fa6fba9.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
122 3
|
2月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
104 15
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
207 6
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
134 1
|
2月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
122 0
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
608 66
|
3月前
|
缓存 关系型数据库 MySQL
MySQL数据库性能调优:实用技术与策略
通过秉持以上的策略实施具体的优化措施,可以确保MySQL数据库的高效稳定运行。务必结合具体情况,动态调整优化策略,才能充分发挥数据库的性能潜力。
181 0
|
5月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。