【问题标题】:SQL Server - Aggregate with group by is faster than aggregate withoutSQL Server - 使用 group by 聚合比不使用聚合更快
【发布时间】:2012-09-24 15:51:41
【问题描述】:

我很难弄清楚为什么在一种情况下强制执行特定的执行计划,而不是在另一种情况下。示例:

select min(COLUMN) from TABLE where FK_COLUMN = 1;

对比

select min(COLUMN) from TABLE where FK_COLUMN = 1 group by FK_COLUMN;

第一个生成带有索引扫描的执行计划,而第二个扫描被替换为查找。进一步增加我的困惑的是,这不会发生在表格的每一列上 - 对于某些列,我不需要 group by 来生成搜索。我还注意到,缓慢的情况只发生在某些外键值上——那些只返回没有行的值,但不是所有没有返回行的值都会产生不利的计划。什么给了?

【问题讨论】:

  • 什么索引在你的桌子上?
  • 主键上的单个聚集索引。
  • 请提供更详细的信息(列 - 索引)。多少索引
  • 选择的计划取决于很多东西:索引、缓存、统计、数据的传播等。我早就放弃了尝试第二次猜测优化器 - 我只是选择它!

标签: sql indexing group-by aggregate sql-execution-plan


【解决方案1】:

我选择@Robbie Dee 作为 Oracle CBO 选择的执行计划,这并不意味着它是最好的方式,而是在大多数情况下最优化的方式。 此外,执行计划可以根据列和行的存储方式(基本上是表的大小)而改变。

考虑一个以 EMP_ID 列为主键的 EMP 表。如果我们在搜索中包含主键列,我们会期望INDEX RANGE SCAN,但我们可能会在解释计划中得到FULL TABLE ACCESS。这是 Oracle CBO 选择的数据访问路径,因为它知道表的大小太小,不需要根据主键进行搜索。

第...

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多