今天第一次遇到count(1)这个字段 ,不太理解是什么意思,下文是查询结果和自己的实际执行。
实际上这里的 count(1) 和count(*) 是一个含义,都是作为表达式对待的。
count(1),其实就是计算一共有多少符合条件的行。1并不是表示第一个字段,而是表示一个固定值。我们可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1,即计算有多少行数据。同理,count(2)、count(3),得到的值完全一样,就是计数。
count(*),执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。
从含义上讲,count(1) 与 count(*) 都表示对全部数据行的查询,都会统计Null值。
count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
count(*) 包括了所有的列,相当于行数,在统计结果的时候,包含字段为null 的记录;
count(1) 用1代表代码行,在统计结果的时候,包含字段为null 的记录 。
1)在表没有主键时,count(1)比count(*)快
2)有主键时,主键作为计算条件,count(主键)效率最高;
3)若表格只有一个字段,则count(8)效率较高。
网友评论