count(1)和count(*)的区别,对这个问题有疑问的网友可以看看
count(1),其实就是计算一共有多少符合条件的行。1并不是表示第一个字段,而是表示一个固定值。我们可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.。同理,count(2)、count(3),得到的值完全一样,count('x'),count('y')都是可以的。一样的理解方式。在你这个语句理都可以使用,返回的值完全是一样的。就是计数。
count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。
如果你的数据表没有主键,那么count(1)比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的,不过两者的差别不大
count(1)和count(*):
都为统计所有记录数,包括null
执行效率上:当数据量1W+时count(*)用时较少,1w以内count(1)用时较少
count(字段):
统计字段列的行数,不包括null
若字段为主键则count(主键)效率最高,否则少量数据时使用count(1)
总结:少量数据不忽略null选count(1),大量数据选count(*),忽略null选count(字段)