我知道像这样做查询通常不是一个好主意:
SELECT * FROM `group_relations`
但是当我只想要计数时,我是否应该执行这个查询,因为这允许表更改,但仍然会产生相同的结果。
SELECT COUNT(*) FROM `group_relations`
或者更具体的
SELECT COUNT(`group_id`) FROM `group_relations`
我有一种感觉,后者可能会更快,但有没有其他需要考虑的事情?
更新:我在这种情况下使用的是InnoDB,很抱歉没有更具体。
发布于 2009-01-19 11:12:40
如果有问题的列不是NULL,那么您的两个查询是等价的。当group_id包含空值时,
select count(*)
将对所有行进行计数,而
select count(group_id)
将只计算group_id不为null的行数。
此外,一些数据库系统,如MySQL,在您请求计数(*)时采用了优化,这使得这样的查询比特定的查询快一点。
就我个人而言,当只是计数时,为了安全起见,我会使用count(*)来计算空值。
发布于 2009-01-19 11:10:51
如果我没记错的话,在MYSQL中,COUNT(*)计算所有行,而COUNT(column_name)只计算给定列中具有非NULL值的行。
发布于 2009-01-19 11:32:25
COUNT(*)计算所有行,而COUNT(column_name)将只计算指定列中没有NULL值的行。
在MySQL中需要注意的重要事项:
对于*或非null列的MyISAM表,COUNT()非常快,因为行计数是缓存的。InnoDB没有行计数缓存,因此无论列是否为null,COUNT(*)或COUNT(column_name)的性能都没有差别。您可以在MySQL performance博客上了解更多关于this post的差异。
https://stackoverflow.com/questions/457263
复制相似问题