count(*),count(1)和count(字段)的区别

count(*),count(1)和count(字段)的区别

之前在写sql语句时,常常使用count(*)来执行查询数据条数,也使用过count(字段)来针对某一特殊字段进行查询,今天接触到了count(1)也可以用来进行数据统计,下来查看资料,对它们有了一定的了解。

很多人认为count(1)执行的效率会比count(*)高,原因是count(*)会存在全表扫描,而count(1)可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。

下面它们之间的一些对比:1)在表没有主键时,count(1)比count(*)快;2)有主键时,主键作为计算条件,count(主键)效率最高;3)若表格只有一个字段,则count(*)效率较高。

原文地址:https://www.cnblogs.com/zhangshuaihui/p/10259411.html

时间: 2024-10-09 19:05:11

count(*),count(1)和count(字段)的区别的相关文章

sql中count(*)和count(字段名)区别详解及用途

文章详细利用实例来介绍了关于sql中count(*)和count(字段名)区别有需要的同学可以参考一下下. 以前没有注意两者的区别,看博客园的文章,还真引起了我的注意. 数据测试:见图 sql 语句见分晓: SELECT COUNT(*) c1 ,COUNT(ADDRESS) c2 FROM test 显而易见,count(*)统计的是结果集的总条数,count(字段名)统计的是该字段值不为null的总条数

COUNT(*),count(1),COUNT(ALL expression),COUNT(DISTINCT expression)

创建一个测试表 1 IF OBJECT_ID( 'dbo.T1' , 'U' 2 )IS NOT NULL 3 BEGIN 4 DROP TABLE dbo.T1; 5 END; 6 GO 7 CREATE TABLE dbo.T1( column_1 int ,column_2 varchar(30)); 8 GO 9 10 11 INSERT INTO dbo.T1( column_1 , column_2 ) 12 VALUES( 1 , '123') , ( 2 , '1234') ,

hql中不能写count(1)可以写count(a.id)

hql中不能写count(1)可以写count(a.id)里面写具体的属性 String hql="select new com.haiyisoft.vo.entity.cc.repo.BusinessStat(  r.paramName ,t.paramName , " +" (select nvl(count(1),0) " +" from com.haiyisoft.entity.cc.busi.Business b,com.haiyisoft.en

属性与字段的区别

本文转载自NetLYF 首先从两者的声明上来看,公共字段只是类用public修饰符所公开的简单公共变量,而属性则是对字段的封装,它使用get和set访问器来控制如何设置或返回字段值. 由于属性的实质是方法(get或set方法),在IL中是没有属性的概念的.所以对于开发过程中常用的赋值和取值操作来说,使用公共变量肯定会比使用属性速度要快,性能上也稍高(方法和变量哪个速度不用说了吧). 公共字段虽然在速度上快,但它必须开放字段为public,这样一来对象的调用者便可以直接修改其值,值的内容是否合法,

C# 属性和字段的区别

属性和字段的区别 在C#中,我们可以非常自由的.毫无限制的访问公有字段, 但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值.或是要求字段只能读或只能写, 或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性, 属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作. 在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值. 当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个

C#中属性和字段的区别

属性和字段的区别 在C#中,我们可以非常自由的.毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值.或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作.在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值.当缺少其中一块时属性就只能读或只能写,set和get块中属性必需有一个,因为即不

sql中count(*)和count(字段名)区别

数据测试:见图 sql 语句见分晓: SELECT COUNT(*) c1 ,COUNT(ADDRESS) c2 FROM test 显而易见,count(*)统计的是结果集的总条数,count(字段名)统计的是该字段值不为null的总条数

select count(1) 和 select count(*)的区别

统计一个表T有多少行数据,通常写法是: 查询A:select count(*) from T 但也可以采用下面语句来查: 查询B:select count(1) from T 结果通常是一样的.那么二者区别在哪里呢? 如果T表是个很大的表,那么查询速度将有显著的差异.实践中T表有4200万行,采用查询B,耗时3分多钟,而采用查询A,则耗时不到1秒.可见在大表的查询上必须非常谨慎. 那么为什么查询A比查询B快呢? 个人分析认为,查询A不需要过滤,直接用末行位置-首行位置/每行占用位置.而查询B,因

Count(*)与count(age)区别

Count(*)表示取得所有记录,忽略null,为null值也会取得. 采用count(字段名称),不会取得为null的纪录. 注意:在mysql和oracle中都适用. 原文地址:https://www.cnblogs.com/2016-cxp/p/11026851.html

sqlserver sum 和count在关于进行统计时的区别

sum是对内容的数量进行相加,count 对表行数 对象进行统计 在使用 case 时,如 select subject,count(case when score>80 then score else null end) 优,count(case when score<80 and score>59 then score else null end) 优,count(case when score<60 then score else null end) 优from stusco