select count (1)
count(1),其实就是计算一共有多少符合条件的行。
1并不是表示第一个字段,而是表示一个固定值。
其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.
同理,count(2),也可以,得到的值完全一样,count('x'),count('y')都是可以的。一样的理解方式。在你这个语句理都可以使用,返回的值完全是一样的。就是计数。
count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。
select count(column) 、 select count(*) 和 select count(1) 的区别
有次在统计页面的某个数值时,发现数据总会漏算,后面才知道,select (*)和select (column)是有区别的。 PS:菜是原罪啊! 据《高性能MySQL》一书记载: 总结: select count(column) 对 特定的列 的值具有的行数进行计算,不包含 NULL 值。 select count(*) 对 行 的数目进行计算,包含 NULL。 当然,select count(1) 和 select count(*) 的结果是一样的。 1.任何情况下SELECT COUNT(*) FROM tablename是最优选择; 2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询; 3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。 count(1) 跟 count(主键) 一样,只扫描主键。count(*) 跟 count(非主键) 一样,扫描整个表。明显前者更快一些。