电脑安全

您当前的位置:主页 > 电脑安全 >

Select count(*)、Count(1)和Count(列)的区别及执行方式

来源:[db:来源]标题:   宋体    编辑:电脑技术全能网 时间:2019-09-18 06:25

原标题:Select count(*)、Count(1)和Count(列)的区别及执行方式
   在SQL Server中Count(*)或许Count(1)或许Count([列])或者是最罕用的聚合函数。许多人实在对这三者之间是辨别不清的。本文会论述这三者的感化,关联以及背地的道理。 平常我常常会看到一些所谓的优化倡议不应用Count(* )而是应用Count(1),从而能够晋升机能,给出的来由是Count( *)会带来全表扫描。而现实上怎样写Count并没有差别。 Count(1)和Count(*)现实上的意义是,评价Count()中的表白式能否为NULL,假如为NULL则不计数,而非NULL则管帐数。比方咱们看代码1所示,在Count中指定NULL(优化器不同意显式指定NULL,因而须要赋值给变量才干指定)。复制代码代码以下:DECLARE @xx INTSET @xx=NULLSELECT COUNT(@xx) FROM [AdventureWorks2012].[Sales].[SalesOrderHeader]代码清单1.Count中指定NULL因为全部行都为NULL,则成果全不计数为0,成果如图1所示。image图1.显而易见,成果为0 因而当你指定Count(*) 或许Count(1)或许不管Count(‘anything')时成果都市一样,由于这些值都不为NULL,如图2所示。image图2.只有在Count中指定非NULL表白式,成果没有任何差别那Count列呢? 关于Count(列)来讲,一样实用于下面规矩,评价列中每一行的值能否为NULL,假如为NULL则不计数,不为NULL则计数。因而Count(列)管帐算列或这列的组合不为空的计数。那Count(*)详细怎样履行? 后面提到Count( )有不为NULL的值时,在SQL Server中只要要找出详细表中不为NULL的行数便可,也就是全部行(假如一行值全为NULL则该行相称于不存在)。那末最简略的履行方法是找一列NOT NULL的列,假如该列有索引,则应用该索引,固然,为了机能,SQL Server会抉择最窄的索引以增加IO。 咱们在Adventureworks2012示例数据库的[Person].[Address]表上删除全部的非聚拢索引,在ModifyDate这个数据范例为DateTime的列上树立索引,咱们看履行打算,如图3所示:image图3.应用了CreateDate的索引 咱们持续在StateProvinceID列上树立索引,该列为INT列,占4字节,比拟之前8字节 DateTime范例的列更短,因而SQL Server抉择了StateProvinceID索引。如图4所示。image图4.抉择了更短的StateProvinceID索引因而,假如某个表上Count(*)用的比拟多时,斟酌在一个最短的列树立一个单列索引,会极大的晋升机能。

上一篇:MSSQL Server 存储过程嵌套示例-网络编程

下一篇:没有了