在任何数据库表上,“select table_name select count(1)”是什么意思?

当我们select count(*) from table_name执行select count(*) from table_name它返回行数。

count(1)做什么? 1在这里表示什么? 这和count(*)是一样的(因为它在执行时给出相同的结果)?

COUNT函数的参数是要为每行计算的expression式。 COUNT函数返回expression式求值为非空值的行数。 (*是不被评估的特殊expression式,它只是返回行数。)

expression式还有两个额外的修饰符:ALL和DISTINCT。 这些决定是否丢弃重复。 由于ALL是默认值,因此您的示例与count(ALL 1)相同,这意味着保留了重复项。

由于expression式“1”对每一行都计算为非空值,并且由于不删除重复项,因此COUNT(1)应始终返回与COUNT(*)相同的编号。

这里有一个链接 ,将有助于回答你的问题。 简而言之:

计数(*)是正确的方法来写它和计数(1)是优化内部计数(*) – 自

a)统计1不为空的行效率低于
b)对行进行计数

oracle中count(*)和count(1)之间的区别?

计数(*)意味着它将计数所有logging,即每个单元格但是

count(1)表示将添加一个值为1的伪列,并返回所有logging的计数

这与之间的区别相似

 SELECT * FROM table_name and SELECT 1 FROM table_name. 

如果你这样做

 SELECT 1 FROM table_name 

它会给你表中的每一行数字1。 所以是count(*)count(1)将提供相同的结果将count(8)count(column_name)

没有区别。

COUNT(1)基本上只是为每行计算一个常量值为1的列。 正如其他用户所说,这与COUNT(0)COUNT(42) 。 任何非NULL值都足够了。

http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789

Oracle优化器确实使用了错误,导致计数受到您select的列以及是否在索引中的影响,所以COUNT(1)约定应运而生。

在oracle中我相信这些意思完全一样

 SELECT COUNT(1) from <table name> 

应该做同样的事情

 SELECT COUNT(*) from <table name> 

在某些数据库中,可能会有或者仍然有一些原因会比SELECT COUNT(*)执行得更好,但是我会考虑DB中的一个错误。

 SELECT COUNT(col_name) from <table name> 

但具有不同的含义,因为它仅计算给定列的非空值的行。

你可以这样testing:

 create table test1( id number, name varchar2(20) ); insert into test1 values (1,'abc'); insert into test1 values (1,'abc'); select * from test1; select count(*) from test1; select count(1) from test1; select count(ALL 1) from test1; select count(DISTINCT 1) from test1; 

根据你问的人,有些人报告说select count(1) from random_table;执行select count(1) from random_table; 运行速度比select count(*) from random_table 。 其他人声称他们完全一样。

此链接声称2之间的速度差异是由于全表扫描与快速全面扫描。