代码之家  ›  专栏  ›  技术社区  ›  Martin Bean

计数(fld)是否快于计数(*)?[副本]

  •  2
  • Martin Bean  · 技术社区  · 14 年前

    可能重复:
    COUNT(id) vs. COUNT(*) in MySQL

    简短但简单:在MySQL中 SELECT COUNT(fld) AS count FROM tbl 快于 SELECT COUNT(*) AS count FROM tbl 据我所知 * 是MySQL中的“all”选择器。

    COUNT(*) 选择要计算计数的所有行,并因此使查询类似于 SELECT(id) 便宜点?还是真的不重要?

    3 回复  |  直到 7 年前
        1
  •  3
  •   Guffa    14 年前

    不, count(*) count(fld) (在完全不同的情况下)。

    这个 计数(fld) 必须考虑字段中的数据,因为它计算所有非空值。

    这个 计数(*) 只统计记录的数量,所以不需要访问数据。

        2
  •  1
  •   Ben    14 年前
    SELECT COUNT(*) AS count FROM tbl
    

    上面的查询甚至不计算行,假设没有 WHERE 子句,它直接从表缓存中读取。指定字段而不是 * 强制SQL实际计算行数,因此使用它要快得多 * 当没有 哪里 条款。

        3
  •  0
  •   Benoit    14 年前

    * 是MySQL中的all选择器

    当您选择列时是这样的,其中 * 是整个列列表的快捷方式。

    SELECT * 变成 SELECT foo, bar .

    但是 COUNT(*) 未扩展到 COUNT(foo,bar) 这在SQL中是荒谬的。 COUNT 是一个聚合函数,通常每个选定行需要一个值。