虽然在SO中已经发布了几个关于Over Partition By
和Group By
之间差异的问题,但我没有找到关于哪个表现更好的明确结论。
我设置了simple scenario at SqlFiddle,其中Over (Partition By)
似乎拥有更好的执行计划(但我对它们并不熟悉)。
表中的数据量是否应该改变这个?那么Over (Partition By)
最终会表现得更好吗?
答案 0 :(得分:2)
窗口函数的执行计划明显不如组的执行计划(整个组按执行计划包含在窗口函数执行计划的右上角)。对于group by,SQL通常比使用over子句更好地优化,但是每个都有它们的用途。例如,如果您想为每个条目输出一行以及该组的总和,那么窗口化可能更有意义(例如A.id|B.b1|sum B.b1 over A.id
)。既然你没有,它实际上没有。你基本上是使用一个组,然后再次使用一个独特的,而不是仅使用该组暗示的不同。