今天,边肖将与您分享一个关于select count()和select count(1)的区别和实现的解释。边肖觉得内容挺好的,现在分享给大家,很有参考价值。有需要的朋友应该跟着边肖去看看。
Count(*)或Count(1)或Count([ column])可能是SQL Server中最常用的聚合函数。很多人其实分不清三者的区别。本文将解释其功能、关系及其背后的原理。
经常看到一些所谓的优化建议,用Count(*)代替Count(1),可以提高性能。给出的理由是Count( *)会带来全表扫描。其实Count怎么写没什么区别。
其实Count(1)和Count(*)的意思是评估Count()中的表达式是否为空,为空则不计数,不为空则计数。例如,如代码1所示,我们在Count中指定NULL(优化器不允许显式指定NULL,所以需要将其赋给变量来指定)。
声明@xx INT
SET @xx=NULL
从[AdventureWorks2012]中选择COUNT(@xx)。【销售】。[销售订单标题]
清单1。1中指定了NULL。计数代码。因为所有行都是空的,所以结果根本不计算在内。很明显,结果是0。
因此,当您指定Count(*)或Count(1)或任何计数(' any ')时,结果将是相同的,因为这些值不为NULL,如下图所示。
只要在Count中指定了NULLn-null表达式,结果就没有区别。
如果只看结果,Select Count(*)和Select Count(1)的返回结果是相同的。
如果表没有主键,则count(1)比count(*)快。如果有主键,那么当主键是count的条件时,count(主键)是最快的。
如果您的表只有一个字段,那么count(*)是最快的。
与count(1)的结果一样,count(*)包含NULL的统计信息,而count(column)是不包含NULL的统计信息。
1、select 1 与 select *的区别
选择常量自.对应于所有行,并且总是只返回一个值,即常量。所以normal只会用来判断有没有(比如exists子句)。并选择* from.是返回所有行的所有列。
性能上的差异取决于您的from和where子句。例如,如果您可以在where条件中传递索引,那么显然select 1 from的性能.优于select * from.
2、select sum(1)的使用
Select (*)返回符合条件的所有记录的数目,与select sum(1)相同。
但是sum()可以传递任意数,负数或者浮点数,返回值就是传入的值n*满足条件的记录数m。
总结
这就是本文的全部内容。希望这篇文章的内容对你的学习或工作有一定的参考价值。谢谢你的支持。如果你想了解更多,请查看下面的相关链接。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。