1. count函数
1.1. count查询结果
count(*)是以所有字段做count
count(1)是以查询结果第一个字段做count,两者的结果是一样的
这里的1应该不是位置变量,相当于给*的结果加一个值为1伪列,再count 1的数量
所以结果和count(*)是一样的,即count(rowid)
count(1),你可以理解成有个字段,这个字段就是固定值1,那么也是计算分组下重复的行数。
同理,count(2), count(3)或者count('x')等等都是一样的结果。
count(rowid)也是一样
1.2. count速度比较
如果你的数据表没有主键,那么count(1)比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的啦
select count(*), select count(0), select count(1) from table
在统计表的行数时候,经常用到 select count(*)
然而对于行数很多的大表,这样的查询速度将会很慢。因为这样的查询对表的每一行都会进行每个列的扫描。
You Asked
What is the difference between count(1) and count(*) in a sql query
eg.
select count(1) from emp;
and
select count(*) from emp;
and we said...
nothing, they are the same, incur the same amount of work -- do the same thing, take the
same amount of resources.
count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入).
distinct 列名,得到的结果将是除去值为null和重复数据后的结果
1.1. count查询结果
count(*)是以所有字段做count
count(1)是以查询结果第一个字段做count,两者的结果是一样的
这里的1应该不是位置变量,相当于给*的结果加一个值为1伪列,再count 1的数量
所以结果和count(*)是一样的,即count(rowid)
count(1),你可以理解成有个字段,这个字段就是固定值1,那么也是计算分组下重复的行数。
同理,count(2), count(3)或者count('x')等等都是一样的结果。
count(rowid)也是一样
1.2. count速度比较
如果你的数据表没有主键,那么count(1)比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的啦
select count(*), select count(0), select count(1) from table
在统计表的行数时候,经常用到 select count(*)
然而对于行数很多的大表,这样的查询速度将会很慢。因为这样的查询对表的每一行都会进行每个列的扫描。
You Asked
What is the difference between count(1) and count(*) in a sql query
eg.
select count(1) from emp;
and
select count(*) from emp;
and we said...
nothing, they are the same, incur the same amount of work -- do the same thing, take the
same amount of resources.
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1156159920245
http://www.oracledba.co.uk/tips/count_speed.htm
count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入).
distinct 列名,得到的结果将是除去值为null和重复数据后的结果