MySQL 中的 COUNT(id) 与 COUNT(*)

Posted

技术标签:

【中文标题】MySQL 中的 COUNT(id) 与 COUNT(*)【英文标题】:COUNT(id) vs. COUNT(*) in MySQL 【发布时间】:2010-12-14 09:43:27 【问题描述】:

假设表中有一个主字段“id”(如速度等),以下查询之间是否有区别?

SELECT COUNT(id) 
  FROM table

对比

SELECT COUNT(*) 
  FROM table

【问题讨论】:

在 www.mysqlperformanceblog.com 上查看Count(*) vs Count(col),他们针对各种“col”类型(NOT NULL 与否,带有索引等)讨论了这个主题,而这个主题适用于 MyISAM 和 InnoDB 表. 你可以看看这些线程***.com/questions/1221559/count-vs-count1***.com/questions/433913/…***.com/questions/59294/… 【参考方案1】:

我知道这个问题是关于 MySQL 的,但是对于它的价值,建议 Oracle 使用 count(*):这表明这是特定于数据库的(参见 BalusC 的上述评论)。由于许多数据库(MS-SQL、MySQL)都有包含各种类型元数据的信息模式表,如果一种语法只是简单地查找现成的值,而另一种语法直接查找表,则必然会有所不同.在一天结束时:尝试不同的选项,看看 EXPLAIN 告诉你幕后发生了什么。

【讨论】:

在我看来越来越多的方法是要么使用 ORM(并希望它针对所有情况进行优化),要么为 one 编写 SQL数据库引擎,忘记其余的。【参考方案2】:

计数(*) 计数(姓名) 可以显示差异输出,因为 Ename 不是具有 不是空约束,它肯定有一些空值 哪些没有被计算在内。

希望对您有所帮助..!

【讨论】:

我认为这个问题指的是 PK 当它说“id”时,所以假定 NOT NULL 以及 PRI 索引。

以上是关于MySQL 中的 COUNT(id) 与 COUNT(*)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:如何优化字段 SUM 的结果?

在mysql中使用where和inner join

MySQL中的limit vs exists vs count(*) vs count(id) [重复]

MySQL - 使用 COUNT 在同一个表上进行完全外连接

Python中的多处理与线程

加快 MySQL 中的行计数