【问题标题】:Sorting before Grouping, and vice-versa : which is faster?在分组之前排序,反之亦然:哪个更快?
【发布时间】:2011-07-29 23:54:33
【问题描述】:

只是把这个扔在这里,因为我听到我同事的困境后变得很好奇。

在一般的生产环境查询中,先排序再分组还是先分组再排序会更快吗?

是的,一个通用生产环境。我知道这取决于很多事情:您查询的行数、初始结果集的行数、列数、我使用的数据库架构、明天是否一定会下雨等等。我知道,我知道。我说一般是因为我真的没有任何界限来明确地设置我的这种好奇心。

根据您的经验,让我们说一下,哪个更快?

【问题讨论】:

  • 我从未尝试过比较它们,但如果您发现其中的差异,我会感到非常惊讶。 SQL 引擎不会为您优化吗?
  • 呸,想关闭不是一个真正的问题。答:这取决于数据库、其中的内容、架构、索引等。
  • 性能问题没有具体细节是无法回答的!您不妨问“哪个更快,5 速手动还是 6 速自动?”没有具体说明,你知道,你在说什么车。
  • 请定义“分组前先排序”的真正含义......无论如何,分组是排序的排序......几乎很明显,如果您希望 GROUP BY 的结果排序然后首先减少数据集(通过分组)更快。但只需在您的数据库引擎中查找查询计划,看看您的数据库是怎么想的……
  • @Will ~ 如果它与您对真实问题的想法不符,请成为我的客人。没什么大不了的。

标签: sql algorithm sorting performance group-by


【解决方案1】:

要分组,必须先排序(引擎会这样做)。如果您尝试先排序,则结果不一定是排序的:

select a, sum(b)
from (
    select a, b
    from c
    order by a 
    ) d
group by a

所以不要尝试先排序,因为无论如何你都需要排序,这只会让你的代码混乱。

【讨论】:

  • 虽然这个问题读起来没有多大意义(即使对我来说!),我不得不说这是我正在寻找的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多