度量快速开发平台-专业、快速的软件定制快开平台

标题: 小发现:count(1)、count(*)、count(column)、order by 1, 2, 3, 4 [打印本页]

作者: fteair    时间: 2020-2-10 14:06

作者: 万望    时间: 2020-4-20 23:08
标题: 小发现: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进行排序,并没有什么其他的特殊之处。



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





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

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



作者: 陈晓龙    时间: 2020-4-21 09:48

作者: 陈晓龙    时间: 2020-4-21 09:49





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2