【问题标题】:SQL getting row count optimization [duplicate]SQL获取行数优化[重复]
【发布时间】:2012-02-09 18:50:48
【问题描述】:

可能重复:
In SQL, what's the difference between count(column) and count()?
Count() vs Count(1)

我有一张大桌子,可以保存长文本,例如电子邮件内容或新闻。我的问题 计算表格行数的性能有什么不同:

SELECT COUNT(*) FROM table_name

SELECT COUNT(t.id) FROM table_name as t

哪个更好?或者后一个将由查询优化器优化?有这方面的文件吗?

【问题讨论】:

  • 假设 id 是一个不可为空的列(看起来像 PK)。它们在任何体面的 DBMS 中都应该是相同的
  • @juergend - COUNT(*) 和 COUNT(1) 是同义词。但是 COUNT(id) 有不同的行为。

标签: sql database-performance


【解决方案1】:

它们是不同的。

COUNT(*) 将检索所有值(甚至 NULL 值计数)。 COUNT(t.id) 不计算 NULL 值。


在性能方面,它们是相同的(查询优化器很聪明)。

【讨论】:

  • 就性能而言,它们仅对于不可为空的列绝对相同。如果该列不可为空,那么 QO 可以选择一个更窄的索引,甚至不包含指定的列,或者(对于 MySQL - 不记得哪个存储引擎)使用根本不需要表访问的缓存值。
【解决方案2】:

查询计划看起来一样,但在测试中,使用 * 更快(稍微)。

在指定列名时不考虑空值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多