从执行结果来说
count(1)和count(*)之间没有区别,因为count(*)count(1)都不会去过滤空值
count(列名)会去过滤空值
从执行效率来说
MySQL会对count(*)做优化
(1)如果列为主键,count(列名)效率优于count(1)
(2)如果列不为主键,count(1)效率优于count(列名)
(3)如果表中存在主键,count(主键列名)效率最优
(4)如果表中只有一列,则count(*)效率最优
(5)如果表有多列,且不存在主键,则count(1)效率优于count(*)
count(*) 和count(列名) 两者查询差异的原因分析
在数据记录都不为空的时候查询出来结果上没有差别的
count(*)(是针对全表)将返回表格中所有存在的行的总数包括值为null的行
count(列名)(是针对某一列)将返回表格中某一列除去null以外的所有行的总数
其他
distinct 列名
,得到的结果将是除去值为null和重复数据后的结果