小发现:count(1)、count(*)、count(column)、order by 1, 2, 3, 4

今天在看SQL的时候看到order by 1, 2, 3这样的语法,顿时眼睛一亮,因为我从来就没有这样用过,一般我都是order by column1, column2, column3,然后我就上网查了一下,有如下的发现:

count(1) = count(2) = count(3) = count(*),这四者是相等的,count(*)我们都知道在统计记录的时候是不管null的,有null记录也会被统计进去,所以count(1)、count(2)、count(3)也是一样;相反的,count(column)按照某个列在统计,如果该column是null,那么统计的时候该记录就不会被统计进去。如果column字段是主键,则count(column)的查询效率较count(1)要高;如果column字段不是主键,则count(1)的效率要比count(column)高,这种查询效率的说法是网上的解释,我觉的不一定是主键,如果建立了索引应该查询效率就会有所提高,我没有检测过,我猜测是这样。

至于order by 1, 2, 3, 4的用法,很好理解,就表示按照查找查询结果集中的column1、column2、column3、column4进行排序,并没有什么其他的特殊之处。

2014年11月19日补充:


排序列2是人为构造的,不报错

图1:排序列2是人为构造的,不报错

排序列1是真实存在的数据库列,报错

图2:排序列1是真实存在的数据库列,报错

需要注意的是,group by1,2,3,4,5这种用法并不总是有效,如果当分组列是真实存在的数据库列,那么就会报错,如果该列是人为的构造出来的,那么就没错,而这样的话也就没啥实际意义了。

本文标题:小发现:count(1)、count(*)、count(column)、order by 1, 2, 3, 4

本文链接:http://yedward.net/?id=75

本文版权归作者所有,欢迎转载,转载请以文字链接的形式注明文章出处。

相关文章