执行结果:
count(1)和count(*)之间没有区别,因为count(*)count(1)都不会去过滤空值,
count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
执行效率
(1)如果列为主键,count(列名)效率优于count(1) ,count(主键列名)效率最优
(2)如果列不为主键,count(1)效率优于count(列名)
(3)如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
(4)如果表只有一个字段,则 select count(*)最优。
关于count(1)count(*)原理
count(1),其实就是计算一共有多少符合条件的行。1并不是表示第一个字段,而是表示一个固定值。其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.
count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。