select count()和选择计数(1)的区别和执行方式讲解

  

在SQL Server中Count(*)或者数(1)或者数((列))或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作用,关系以及背后的原理。

  

往常我经常会看到一些所谓的优化建议不使用Count(*)而是使用计数(1),从而可以提升性能,给出的理由是Count(*)会带来全表扫描。而实际上如何写数并没有区别。

  

计数(1)和Count(*)实际上的意思是,评估数()中的表达式是否为NULL,如果为空则不计数,而非零则会计数比。如我们看代码1所示,在计数中指定零(优化器不允许显式指定NULL,因此需要赋值给变量才能指定)。

        声明@xx INT   设置@xx=NULL   选择计数(@xx) [AdventureWorks2012]。[销售]。[SalesOrderHeader]      

代码清单1.计算中指定空,由于所有行都为NULL,则结果全不计数,显而易见,结果为0

  

因此当你指定Count(*)或者数(1)或者无论数(“什么”)时结果都会一样,因为这些值都不为NULL,如下图所示

  

 select count()和选择计数(1)的区别和执行方式讲解

  

只要在计数中指定非空表达式,结果没有任何区别

  

只看结果的话,<代码> Select Count(*) 和<代码> Select Count(1) 两着返回结果是一样的。

  

假如表沒有主键(主键),那么计数(1)比count(*)快,如果有主键的話,那主键作为计数的条件时候数(主键)最快。

  

如果你的表只有一个字段的话那count(*)就是最快的。

  

count(*)跟计数(1)的结果一样,都包括对NULL的统计,而计数(列)是不包括空的统计。

  

<强> 1,选择1与select *的区别

  

selelct常量从…对应所有行,返回的永远只有一个值,即常量,所以正常只会用来判断是否有还是没有(比如存在子句)。而select * from……是返回所有行的所有列。

  

性能上的差异,关键看你的从和子句。比如说如果你的哪条件中可以通过索引,那显然选择1…的性能比select * from……好。

  

<强> 2,选择和(1)的使用

  

<代码> select count(*) 返回所有满足条件的记录数,此时同选择(1)总和。

  

但是sum()可以传任意数字,负数,浮点数都可以,返回的值是传入值n *满足条件记录数m。

  

<强>总结

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

select count()和选择计数(1)的区别和执行方式讲解