前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL 8.0 的关系数据库新特性

MySQL 8.0 的关系数据库新特性

作者头像
后端技术探索
发布于 2018-08-10 02:18:19
发布于 2018-08-10 02:18:19
1.1K04
代码可运行
举报
文章被收录于专栏:后端技术探索后端技术探索
运行总次数:4
代码可运行

作者:捏造的信仰

原文:https://segmentfault.com/a/1190000013803247

本文介绍几个 8.0 在关系数据库方面的主要新特性。

你可能已经知道 MySQL 从版本 5.7 开始提供了 NoSQL 存储的功能,在 8.0 中这部分功能也得到了一些改进,但鉴于这个在实际当中用得极少,本人也是没用过,所以本文不会介绍这方面的东西,而是关注其关系数据库方面。

1、隐藏索引

隐藏索引的特性对于性能调试非常有用。在 8.0 中,索引可以被“隐藏”和“显示”。当一个索引隐藏时,它不会被查询优化器所使用。

也就是说,我们可以隐藏一个索引,然后观察对数据库的影响。如果数据库性能有所下降,就说明这个索引是有用的,于是将其“恢复显示”即可;如果数据库性能看不出变化,说明这个索引是多余的,可以删掉了。

隐藏一个索引的语法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE t ALTER INDEX i INVISIBLE;

恢复显示该索引的语法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE t ALTER INDEX i VISIBLE;

当一个索引被隐藏时,我们可以从 show index 命令的输出中看到,该索引的 Visible 属性值为 NO

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

2、设置持久化

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SET PERSIST max_connections = 500;

MySQL 会将该命令的配置保存到数据目录下的 mysqld-auto.cnf 文件中,下次启动时会读取该文件,用其中的配置来覆盖缺省的配置文件。

3、UTF-8 编码

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

4、通用表表达式(Common Table Expressions)

复杂的查询会使用嵌入式表,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT t1.*, t2.* FROM 
  (SELECT col1 FROM table1) t1,
  (SELECT col2 FROM table2) t2;

而有了 CTE,我们可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WITH
  t1 AS (SELECT col1 FROM table1),
  t2 AS (SELECT col2 FROM table2)
SELECT t1.*, t2.* 
FROM t1, t2;

这样看上去层次和区域都更加分明,改起来也更清晰的知道要改哪一部分。

关于 CTE 的更详细介绍请看官方文档。

5、窗口函数(Window Functions)

MySQL 被吐槽最多的特性之一就是缺少 rank() 函数,当需要在查询当中实现排名时,必须手写 @ 变量。但是从 8.0 开始,MySQL 新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式。

窗口函数有点像是 SUM()COUNT() 那样的集合函数,但它并不会将多行查询结果合并为一行,而是将结果放回多行当中。也就是说,窗口函数是不需要 GROUP BY 的。

假设我们有一张 “班级学生人数” 表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from classes;
+--------+-----------+
| name   | stu_count |
+--------+-----------+
| class1 |        41 |
| class2 |        43 |
| class3 |        57 |
| class4 |        57 |
| class5 |        37 |
+--------+-----------+
5 rows in set (0.00 sec)

如果我要对班级人数从小到大进行排名,可以这样利用窗口函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select *, rank() over w as `rank` from classes
    -> window w as (order by stu_count);
+--------+-----------+------+
| name   | stu_count | rank |
+--------+-----------+------+
| class5 |        37 |    1 |
| class1 |        41 |    2 |
| class2 |        43 |    3 |
| class3 |        57 |    4 |
| class4 |        57 |    4 |
+--------+-----------+------+
5 rows in set (0.00 sec)

在这里我们创建了名为 w 的 window,规定它对 stu_count 字段进行排序,然后在 select 子句中对 w 执行 rank() 方法,将结果输出为 rank 字段。

其实,window 的创建是可选的。例如我要在每一行中加入学生总数,则可以这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select *, sum(stu_count) over() as total_count
    -> from classes;
+--------+-----------+-------------+
| name   | stu_count | total_count |
+--------+-----------+-------------+
| class1 |        41 |         235 |
| class2 |        43 |         235 |
| class3 |        57 |         235 |
| class4 |        57 |         235 |
| class5 |        37 |         235 |
+--------+-----------+-------------+
5 rows in set (0.00 sec)

这样做有什么用呢?这样我们就可以一次性将每个班级的学生人数占比查出来了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select *,
    -> (stu_count)/(sum(stu_count) over()) as rate
    -> from classes;
+--------+-----------+--------+
| name   | stu_count | rate   |
+--------+-----------+--------+
| class1 |        41 | 0.1745 |
| class2 |        43 | 0.1830 |
| class3 |        57 | 0.2426 |
| class4 |        57 | 0.2426 |
| class5 |        37 | 0.1574 |
+--------+-----------+--------+
5 rows in set (0.00 sec)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nginx 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
统计学最重要的10个概念【附Pyhon代码解析】
平均值是一组数据的算术平均数,计算方法是将所有数值相加后除以数据的总数。它是最常用的集中趋势度量,但容易受极端值影响。
Ai学习的老章
2024/09/12
2020
统计学最重要的10个概念【附Pyhon代码解析】
机器学习测试笔记(11)——线性回归方法(上)
https://item.m.jd.com/product/10023427978355.html
顾翔
2021/01/04
1.5K0
机器学习测试笔记(11)——线性回归方法(上)
Scipy 高级教程——统计学
Scipy 提供了强大的统计学工具,用于描述、分析和推断数据的分布和性质。本篇博客将深入介绍 Scipy 中的统计学功能,并通过实例演示如何应用这些工具。
Echo_Wish
2024/01/16
3250
数据处理的统计学习(scikit-learn教程)
Scikit-learn 是一个紧密结合Python科学计算库(Numpy、Scipy、matplotlib),集成经典机器学习算法的Python模块。 一、统计学习:scikit-learn中的设置与评估函数对象 (1)数据集 scikit-learn 从二维数组描述的数据中学习信息。他们可以被理解成多维观测数据的列表。如(n,m),n表示样例轴,y表示特征轴。 使用scikit-learn装载一个简单的样例:iris数据集 >>from sklearn import datasets >>iris =
机器学习AI算法工程
2018/03/14
1.7K0
数据处理的统计学习(scikit-learn教程)
一种有效自由度的python实现与双尾t检验测试
这里 N 是样本大小,ρXX (j) 和 ρYY (j) 分别是两个采样时间序列 X 和 Y 在时间滞后 j 处的自相关。
用户11172986
2024/06/20
2680
一种有效自由度的python实现与双尾t检验测试
【python】在【机器学习】与【数据挖掘】中的应用:从基础到【AI大模型】
在大数据时代,数据挖掘与机器学习成为了各行各业的核心技术。Python作为一种高效、简洁且功能强大的编程语言,得到了广泛的应用。
小李很执着
2024/06/15
3400
[机器学习|理论&实践]机器学习在无监督学习的应用与挑战
无监督学习是机器学习领域中一种引人注目的学科,它通过探索数据内在的结构和模式而不依赖于标签来进行建模和分析。本文将更深入地探讨无监督学习的应用场景、经典算法示例以及面临的挑战,以期为读者提供对这一领域的全面了解。
数字扫地僧
2023/12/03
5101
【机器学习】——K均值聚类:揭开数据背后的隐藏结构
在现代数据分析中,我们往往会遇到大量没有标签的数据。如何从这些数据中挖掘出有意义的结构和模式呢?这时,聚类分析就显得尤为重要。
用户11286421
2025/01/17
2470
统计建模——模型——python为例
应用方式:用于研究一个连续因变量与一个或多个自变量之间的线性关系。通过对数据进行拟合,确定自变量对因变量的影响程度(系数),并可以用来预测给定自变量值时因变量的期望值。例如,在经济学中,用于分析GDP与投资、消费、出口等因素的关系;在市场营销中,预测销售额与广告支出、价格、季节因素等的关系。
小李很执着
2024/06/15
3830
统计建模——模型——python为例
KS检验及其在机器学习中的应用
Kolmogorov–Smirnov 检验,简称KS检验,是统计学中的一种非参数假设检验,用来检测单样本是否服从某一分布,或者两样本是否服从相同分布。在单样本的情况下,我们想检验这个样本是否服从某一分布函数,记是该样本的经验分布函数。 我们有假设:为此,我们构造KS统计量:
用户3577892
2020/06/12
4.1K0
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
文章链接:https://cloud.tencent.com/developer/article/2465151
小馒头学Python
2024/11/12
1860
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
突出最强算法模型——回归算法 !!
特征选择是指从所有可用的特征中选择最相关和最有用的特征,以用于模型的训练和预测。而特征工程则涉及对原始数据进行预处理和转换,以便更好地适应模型的需求,包括特征缩放、特征变换、特征衍生等操作。
JOYCE_Leo16
2024/03/19
2210
突出最强算法模型——回归算法 !!
机器学习线性回归算法
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。
润森
2022/09/22
1.5K0
机器学习线性回归算法
8个常见的无监督聚类方法介绍和比较
本文约4500字,建议阅读9分钟本文将全面概述Scikit-Learn库中用于的聚类技术以及各种评估方法。 无监督聚类方法的评价指标必须依赖于数据和聚类结果的内在属性,例如聚类的紧凑性和分离性,与外部知识的一致性,以及同一算法不同运行结果的稳定性。 本文将分为2个部分,1、常见算法比较 2、聚类技术的各种评估方法 本文作为第一部分将介绍和比较各种聚类算法: K-Means Affinity Propagation Agglomerative Clustering Mean Shift Clusterin
数据派THU
2023/04/03
5120
8个常见的无监督聚类方法介绍和比较
机器学习-多项式回归算法
多项式回归(Polynomial Regression)顾名思义是包含多个自变量的回归算法,也叫多元线性回归,多数时候利用一元线性回归(一条直线)不能很好拟合数据时,就需要用曲线,而多项式回归就是求解这条曲线。
唔仄lo咚锵
2023/05/23
6790
机器学习-多项式回归算法
python实现Lasso回归
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133562.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/27
3860
python实现Lasso回归
常用机器学习代码汇总
皮大大
2023/08/25
4690
如何绘制qq图_python画图
PS:当然也可以用KS检验,利用python中scipy.stats.ks_2samp函数可以获得差值KS statistic和P值从而实现判断。
全栈程序员站长
2022/09/22
1.5K0
如何绘制qq图_python画图
机器学习开篇小菜
本教程是本人尝试使用scikit-learn的一些经验,scikit-learn真的超级容易上手,简单实用。5分钟学会用调用基本的回归方法和集成方法应该是够了。
润森
2019/09/09
4390
机器学习开篇小菜
小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
2018 区块链技术及应用峰会(BTA)·中国 倒计时 1 天 2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会——2018区块链技术及应用峰会(BTA)·中国将于2018年3月30-31日登陆北京喜来登长城饭店。追求专业性?你要的这里全都有:当超强嘉宾阵容遇上业界同好的脑洞大联欢,1+1=无限可能,目前门票预购火热进行中。 活动详情: http://dwz.cn/7FI1Ch 编译 | 林椿眄 出品 | 人工智能头条(公众号ID:AI_Thinker) 【AI科技大本营导读】P
用户1737318
2018/06/05
1.7K0
推荐阅读
相关推荐
统计学最重要的10个概念【附Pyhon代码解析】
更多 >
LV.2
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档