冗余聚合与冗余GROUP BY?

时间:2014-11-26 13:42:03

标签: sql-server group-by aggregate-functions

我有一个查询,它通过恰好是其中一个表的主键的列连接两个表。我也是GROUP BY同一列。现在我需要使用主键从表中返回一些列。在MySQL中我可以将它们添加到select语句中而不用担心,但在SQL Server中我必须将它们添加到GROUP BY或者包含在聚合函数中(如MAX)。逻辑上两者都是冗余的,因为主键确保我想要获取的列在整个组中具有相同的值。问题是哪种解决方案更好(使用聚合函数或将它们放在GROUP BY中)?

我测试了两种变体,它们似乎具有相同的查询成本。执行计划几乎相同,但具有聚合函数(MAX)的变体似乎稍快。但是,使用聚合函数会对使用的类型设置一些限制,并迫使我不必要地转换某些列的类型(我正在查看您bit列)。注意,我确实需要结果来匹配某些类型。

P.S。我还可以将实际需要分组的列移动到子查询中并将其放在FROM部分中以避免在不需要它的列上使用聚合函数或GROUP BY。然而,我的直觉告诉我它不会让它更快(要测试它)。


然而,我再次证明,在SQL方面,没有任何答案总是正确的。我的答案是不使用这两种方案中的任何一种。我的直觉是错误的,并且将需要分组的表\列放到子查询中,而不是将它们与其余部分连接起来(执行时间甚至更短)。但是在另一个查询中,这种解决方案可能会使事情变得更糟。

因此,我没有找到冗余GROUP BY与冗余聚合的答案,而是发现它实际上是冗余的GROUP BY与冗余聚合与具有非冗余GROUP BY的子查询

0 个答案:

没有答案
相关问题