【问题标题】:SQL Best Practice: count(1) or count(*) [duplicate]SQL 最佳实践:count(1) 或 count(*) [重复]
【发布时间】:2011-10-30 18:33:12
【问题描述】:

可能重复:
Count(*) vs Count(1)

我记得有人告诉我:

当 count(1) 可以使用时,切勿使用 count(*)

最近,我将此建议传递给了另一位开发人员,并被要求证明这是真的。我的论点是当我得到建议时被告知的:数据库将只返回第一列,然后将其计算在内。反对意见是数据库不会评估括号中的任何内容。

从对小桌子的一些(不科学)测试来看,似乎肯定没有区别。我目前无权访问任何大型表来进行实验。

我在使用 Sybase 时得到了这个建议,而表有数亿行。我现在正在使用 Oracle,但数据量要少得多。

所以我想总结一下,我的两个问题是:

  1. count(1) 和 count(*) 哪个更快?
  2. 这在不同的数据库供应商中会有所不同吗?

【问题讨论】:

  • 1. ANSI SQL 定义COUNT(*) 应该被优化2。这适用于大多数RDBMS。其他任何内容仅适用于旧版本声明的地方,否则假定 COUNT(*) 已优化。

标签: sql


【解决方案1】:
  1. 计数(1)
  2. 不,一般来说,它的性能总是会稍好一些。

只有在放大到很大的数量时才会有影响,但这是一种很好的做法。

【讨论】:

  • 没有和没有。神话。 -1。除了重复之外,您还可以在DBA.SE
  • 我不认为一概而论地声明 count(1) 总是会有更好的性能。
  • 您是否有任何文件来支持这种违反传统观念的行为?
  • 此处已揭穿(回答重复问题)stackoverflow.com/questions/1221559/count-vs-count1/…
  • 为什么在所有 cmets 和 5 次投反对票之后,这获得了赞成票?这是错误
【解决方案2】:

在阅读专门关于 TSQL 和 Microsoft SQL Server 的书籍时,我读到使用 * 更好,因为它让优化器决定什么是最好的。我会尝试找到特定书籍的名称并在此处发布。

【讨论】:

  • 这也适用于使用“exists(select * from...)”与“exists(select field from...)”
  • count(*) 是一个足够常见的习语,任何优化器都应该考虑到它,而不仅仅是 SQL Server。我希望我有证据支持这一点。
  • @Mark Ransom:在 ANSI 标准中dba.stackexchange.com/questions/2511/…
【解决方案3】:

这是一个基本的查询模式,意思是一样的。我不止一次读到优化器对它们的处理方式是一样的——现在找不到具体的参考资料,但把它放在“机构知识”的类别中。

(应该先搜索...http://stackoverflow.com/questions/1221559/count-vs-count1)

【讨论】:

    【解决方案4】:

    据我所知,使用 count() 应该更快,因为当调用该函数时,引擎只计算索引。从另一个角度来看,二进制代码中的 count() 和 count(1) 可能看起来非常相似,所以应该没有区别。

    【讨论】:

      【解决方案5】:

      【讨论】:

        【解决方案6】:

        根据另一个类似的问题 (Count(*) vs Count(1)),它们是相同的。

        在Oracle 中,根据Ask Tom,count(*) 是计算行数的正确方法,因为优化器将count(1) 更改为count(*)。 count(1) 实际上意味着对非空 1 的行进行计数(它们都是非空的,因此优化器会为您更改它)。

        【讨论】:

          【解决方案7】:

          我只能与 SQL Server 对话,但在 5 GB 表、11 毫米记录上进行测试 - 读取次数和执行计划都是相同的。

          我会说没有区别。

          【讨论】:

            猜你喜欢
            • 2013-01-28
            • 2015-03-03
            • 1970-01-01
            • 2011-02-12
            • 1970-01-01
            • 2011-05-05
            • 2011-06-19
            • 1970-01-01
            相关资源
            最近更新 更多