MySQL中的`COUNT(*)`和`COUNT(date_created)`之间是否有区别?

时间:2012-06-19 23:27:05

标签: mysql performance

我想知道使用COUNT(*)COUNT(date_created)之间是否存在性能差异。我读过唯一的语义差异是COUNT(*)还包含NULL个值,但date_created字段在此特定情况下不可为空。

我查看了各种帖子,没有人真正回答MySQL的这个问题。我发现的最好的是@tsilb对this thread的评论。

3 个答案:

答案 0 :(得分:2)

计数(*)更快,因为它不需要检查字段。

Count(column_name)需要表扫描,除非该列已经编入索引。

Count(*)只能查看主键索引。

答案 1 :(得分:2)

如果您有date_created的索引,则没有区别。如果它是未编制索引的列,您将最终执行全表扫描。如果您有这样的问题,可以使用EXPLAIN SELECT COUNT(*) FROM my_table并将其与EXPLAIN SELECT COUNT(date_created) FROM my_table进行比较,从而了解很多。

答案 2 :(得分:0)

尝试使用COUNT(*),因为dbms会找出用于获得最佳性能的索引。