【问题标题】:whats faster, count(*) or count(table_field_name) in mysql? [duplicate]mysql中的count(*)或count(table_field_name)更快吗? [复制]
【发布时间】:2011-11-22 20:26:56
【问题描述】:

可能重复:
COUNT(*) vs. COUNT(1) vs. COUNT(pk): which is better?

我想从选择查询中检索计数。

哪个更快:count(*)count(table_field_name)

我想知道哪种方式的性能更快。

【问题讨论】:

标签: mysql


【解决方案1】:

区别在于Count(field)返回字段中NOT NULL值的计数,COUNT(*)是否返回行计数。 MyIsam 中的COUNT(*) 应该更快。
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count

【讨论】:

    【解决方案2】:

    至少在 MyISAM 表上count(*) 应该比count(fliedname) 快​​,因为它允许 mysql 使用索引(大多数时候是主键)来进行计数。如果给定的字段名是主键,它不会有任何区别。

    使用*,mysql 不会像其他人所说的那样转储到“加载整行的数据” - count(*) 始终是最快的或最快的选项之一,而@987654327 @ 可能会慢一些,具体取决于给定的字段。

    编辑
    the documantation 说:

    COUNT(*) 已优化为非常快速地返回 [...]。此优化仅适用于 MyISAM 表

    阅读文档以获取有关此主题的更多信息。

    重要提示: count(*) 返回总行数,而 count(fieldname) 返回给定字段不是 NULL 的行数。这在逻辑上与* 一致,mysql 无法知道要忽略的NULL-values。在执行count() 时始终考虑这一点,因为它可能会对结果产生影响。

    【讨论】:

    • 您能否添加一个明确的文章链接来支持您的第一个声明? – gbn 3 分钟前编辑
    • 对否决票的解释会非常好。引用常见问题解答:“如果您看到错误信息,请投反对票。添加 cmets 指明具体是什么错误”(stackoverflow.com/faq#etiquette)
    • 投反对票是因为您的第一句话是错误的。由于 NULL,COUNT(*) 和 COUNT(table_field_name) 会给出不同的结果。
    • 这就是下面几行所说的。但是count(*)count(primary_key) 我说的是真的不会有所作为不能有所作为,因为主键不应该为空(而且,据我所知,一个主要的不能为空,即使你尝试)。关于count(*)/count(normal_field) 我只是说count(*) 永远不会慢,这也是真的。
    猜你喜欢
    • 2015-12-21
    • 2011-12-18
    • 2011-02-12
    • 2011-09-25
    • 1970-01-01
    • 2010-12-14
    • 2011-03-01
    相关资源
    最近更新 更多