与PARTITION BY和GROUPBY截然不同
我在正在检查的应用程序中找到了一些SQL查询,如下所示:
SELECT DISTINCTCompany, Warehouse, Item,
SUM(quantity) OVER (PARTITION BY Company, Warehouse, Item) AS stock
我很确定这会产生与以下结果相同的结果:
SELECTCompany, 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