与PARTITION BY和GROUPBY截然不同

我在正在检查的应用程序中找到了一些SQL查询,如下所示:

SELECT DISTINCT

Company, Warehouse, Item,

SUM(quantity) OVER (PARTITION BY Company, Warehouse, Item) AS stock

我很确定这会产生与以下结果相同的结果:

SELECT

Company, Warehouse, Item,

SUM(quantity) AS stock

GROUP BY Company, Warehouse, Item

与第一种方法相比,使用第一种方法是否有任何好处(性能,可读性,编写查询时的额外灵活性,可维护性等)?

回答:

回答:

在具有未索引列的大型表上进行的一些非常基本的测试表明,至少在我看来,这两个查询生成了完全不同的查询计划。的PARTITION BY速度明显慢一些。

GROUP BY查询计划只包括一个表扫描和聚集操作,而PARTITION BY计划有两个嵌套的循环自联接。在PARTITION

BY第二运行了约2800ms,则GROUP BY仅仅用了500毫秒。

回答:

根据此处评论者的意见,PARTITION BY对于大多数开发人员而言,它的可读性较差,因此将来可能也很难维护。

回答:

PARTITION BY使您在选择分组列时更具灵活性。使用时GROUP BY,所有聚合的列只能有一组分组列。有了,DISTINCT +

PARTITION BY您可以在每个分区中有不同的列。同样,在某些DBMS上,您可以从OVER子句中的更多聚合/分析功能中进行选择。

以上是 与PARTITION BY和GROUPBY截然不同 的全部内容, 来源链接: utcz.com/qa/398547.html

回到顶部