select count()和select count(1)的区别和执行方式讲解

select count()和select count(1)的区别和执行方式讲解

今天,边肖将与您分享一个关于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。

总结

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

select count()和select count(1)的区别和执行方式讲解