几种count的性能比较
# 几种count的性能比较
在 MySQL 中,count()
函数用于统计一列的行数或者非 NULL 值的个数。COUNT() 可以用在不同的形式中,包括 COUNT(1)、COUNT(*) 和 COUNT(列)。
# 谁的性能更好
既然count()函数,有多种形式,那它们总该有一些区别吧,或者说count(列名)、count(id)、count(1)、count(*)到底谁的性能高。
网上有一种普遍的效率排序关系:
count(普通字段) < count(id) < count(1) = count(*)
1
接下来我们尝试解释下:
count(1) 和 count(*) 性能之所相近,是因为,它的底层经过(mysql)优化完之后,它都是选择这个索引数去进行遍历进行计算的。
如果有主键作用的情况下,他们会用主键索引去进行计算。我们可以通过explain
关键字,来验证一下这个说法。
而count(id)小于它们,则是因为:
这两个他们去遍历主键索引数,他们只需要遍历主键索引树的这个数,遍历一个就加一,遍历一个就加一。那么这个看的ID为什么这个性能说小于它俩呢?是因为这个count(id)去遍历这个索引树,它遍历这个参数之后,要把这个ID给它返回回去,然后再进行这个count加加操作,它有一个返回主键ID这么一个操作,所以网上会说这个count(id)要小于这个count(1)和count(*)。
而普通字段之所以慢,则是因为它没有走索引,它是全表扫描。
但某些特殊情况,count(普通字段)性能可以也跟其余三者差不多。
# 各自的作用
上次更新: 2025/03/23, 14:28:29