count(*)和count(columnName)之间的差异

时间:2012-01-10 11:11:50

标签: mysql count

我想知道使用之间有什么区别:

SELECT email, COUNT( email ) AS total
FROM `newsletter`
GROUP BY email having total>1

SELECT count(*) as total, email 
FROM 'newsletter' 
GROUP BY email having total > 1

两者都给出了相同的结果,但除了电子邮件之外还有什么计算count(*)

4 个答案:

答案 0 :(得分:5)

至少有一个区别。

  • 如果email可以包含NULL,则可能会返回不同的结果。

有关详细信息,请参阅this article

答案 1 :(得分:2)

COUNT(*)计算所有行WHEREAS COUNT(columnname)仅计算非NULL值。

答案 2 :(得分:2)

count(*)允许数据库使用索引进行计数,因此可以进行性能改进。如你所说,在大多数情况下结果是一样的,但是:

  • count(column)仅计算非空行

所以在colusion中:如果你不得不使用空值,请使用count(column),否则使用count(*)以获得更好的性能。

答案 3 :(得分:1)

SELECT COUNT(*)统计所有ROWS

SELECT COUNT(email)计算所有VALUES(非NULL值)

在您的情况下,如果所有行都包含值,则两个结果可能相同。但它可以改善性能,但这取决于表volumne,存储引擎,索引......