📜  sql count * vs count 1 - SQL (1)

📅  最后修改于: 2023-12-03 15:35:04.250000             🧑  作者: Mango

SQL的count(*)和count(1)

在SQL中,COUNT()函数是用来统计表中符合条件的行数的。而在使用COUNT()函数时,经常会出现两种写法,即COUNT(*)COUNT(1)。这两种写法的作用是相同的,都是用来统计行数的。下面将对它们的区别进行介绍。

COUNT(*)

COUNT(*)是最常见的用法,它表示统计表中所有行的数量,不管其中是否存在NULL值。这个函数的执行效率相对较低,因为它需要统计表中的每一行。以下是COUNT(*)的代码示例:

SELECT COUNT(*) FROM 表名;
COUNT(1)

COUNT(1)COUNT(*)的结果是一样的,它也表示统计表中所有行的数量,不管其中是否存在NULL值。但它的执行效率相对较高,因为它只需要统计结果集中的行数,而不需读取表中的行。以下是COUNT(1)的代码示例:

SELECT COUNT(1) FROM 表名;
区别和建议

虽然COUNT(*)COUNT(1)的结果是相同的,但它们的执行效率却有所不同,尤其是对于大表的统计时,COUNT(1)的效率会更高。因此,我们建议在统计表行数时,优先使用COUNT(1)函数,可以提高SQL语句的性能。

除了在统计行数的情况下,COUNT(*)还可以用来统计在查询结果集中的行数,例如:

SELECT COUNT(*) FROM (
    SELECT * FROM 表名 WHERE 条件
) AS T;

但是,在一些特殊情况下,COUNT(*)会出现不必要的问题。例如,当连接多个表时,如果使用了COUNT(*),就会统计交叉连接中的行数,而不是实际匹配的行数。因此,此时需要用到其它的替代方案。

总之,COUNT(*)COUNT(1)都是常用的统计函数,但在程序性能和应用场景上存在一些差别,因此需要根据实际情况来选择使用。