mysql窗口函数执行顺序(mysql的窗口)

mysql窗口函数执行顺序(mysql的窗口)来源 https mp weixin com s zdHHg6MmydiU sniA 窗口函数 Window Function 是 SQL2003 标准中定义的一项新特性 并在 SQL2011 SQL2016 中又加以完善 添加了若干处拓展 窗口函数不同于我们熟悉的普通函数和聚合函数 它为每行数据进行一次计算 输入多行 一个窗口 返回一个值 在报表等分析型查询中

大家好,我是讯享网,很高兴认识大家。



来源:https://mp.weixin..com/s/zdHHg6MmydiUpTopn_sniA

窗口函数(Window Function)是 SQL2003 标准中定义的一项新特性,并在 SQL2011、SQL2016 中又加以完善,添加了若干处拓展。窗口函数不同于我们熟悉的普通函数和聚合函数,它为每行数据进行一次计算:输入多行(一个窗口)、返回一个值。在报表等分析型查询中,窗口函数能优雅地表达某些需求,发挥不可替代的作用。

本文首先介绍窗口函数的定义及基本语法,之后将介绍在 DBMS 和大数据系统中是如何实现高效计算窗口函数的,包括窗口函数的优化、执行以及并行执行。

窗口函数出现在 SELECT 子句的表达式列表中,它最显著的特点就是

其中包括以下可选项:


讯享网

Figure 1. 窗口函数的基本概念

最后一项表示 Frame 的定义,即:当前窗口包含哪些数据?

Figure 2. Rows 窗口和 Range 窗口

逻辑语义上说,一个窗口函数的计算“过程”如下:

举个例子:

上述查询中,

注:语法中每个部分都是可选的:

最后,窗口函数可以分为以下 3 类:

受限于篇幅,本文不去探讨各个窗口函数的含义,有兴趣的读者可以参考这篇文档。

https://drill.apache.org/docs/sql-window-functions-introduction/#types-of-window-functions

注:Frame 定义并非所有窗口函数都适用,比如

聚合这个意义上出发,似乎窗口函数和 Group By 聚合函数都能做到同样的事情。但是,它们之间的相似点也仅限于此了!这其中的关键区别在于:窗口函数仅仅只会将结果附加到当前的结果上,它不会对已有的行或列做任何修改。而 Group By 的做法完全不同:对于各个 Group 它仅仅会保留一行聚合结果。

有的读者可能会问,加了窗口函数之后返回结果的顺序明显发生了变化,这不算一种修改吗?因为 SQL 及关系代数都是以 multi-set 为基础定义的,结果集本身并没有顺序可言

另一方面,从逻辑语义上说,SELECT 语句的各个部分可以看作是按以下顺序“执行”的:

Figure 3. SQL 各部分的逻辑执行顺序

注意到窗口函数的求值仅仅位于

窗口函数经典的执行方式分为排序函数求值这 2 步。

Figure 4. 一个窗口函数的执行过程,通常分为排序和求值 2 步

窗口定义中的

接下来考虑:如何处理 Frame?

对于窗口函数,优化器能做的优化有限。这里为了行文的完整性,仍然做一个简要的说明。

通常,我们首先会把窗口函数从 Project 中抽取出来,成为一个独立的算子称之为 Window。

Figure 5. 窗口函数的优化过程

有时候,一个 SELECT 语句中包含多个窗口函数,它们的窗口定义(

对于不同的窗口,最朴素地,我们可以将其全部分成不同的 Window,如上图所示。实际执行时,每个 Window 都需要先做一次排序,代价不小。

那是否可能利用一次排序计算多个窗口函数呢?某些情况下,这是可能的。例如本文例子中的 2 个窗口函数:

虽然这 2 个窗口并非完全一致,但是

现代 DBMS 大多支持并行执行。对于窗口函数,由于各个分区之间的计算完全不相关,我们可以很容易地将各个分区分派给不同的节点(线程),从而达到分区间并行

但是,如果窗口函数只有一个全局分区(无

TUM 的这篇论文中提出使用线段树(Segment Tree)实现高效的分区内并行。线段树是一个 N 叉树数据结构,每个节点包含当前节点下的部分聚合结果。

下图是一个使用二叉线段树计算

 

 Figure 6. 使用线段树计算给定范围的总和

假设当前 Frame 是第 2 到第 8 行,即需要计算 7+3+10+…+47+3+10+…+4 区间之和。有了线段树以后,我们可以直接利用 7+13+207+13+20 (图中红色字体)计算出聚合结果。

线段树可以在 O(nlogn)O(nlog⁡n) 时间内构造,并能在 O(logn)O(log⁡n) 时间内查询任意区间的聚合结果。更棒的是,不仅查询可以多线程并发互不干扰,而且线段树的构造过程也能被很好地并行起来。

 

小讯
上一篇 2025-04-14 07:52
下一篇 2025-05-24 09:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/149579.html