Oracle

select count(*) 和 select count(any_non_null_column) 有什麼區別?

  • March 29, 2017

我似乎記得(在 Oracle 上)發聲select count(*) from any_tableselect count(any_non_null_column) from any_table.

如果有的話,這兩個語句之間有什麼區別?

  • COUNT(*) 將包括 NULLS
  • COUNT(column_or_expression) 不會。

這意味著當然COUNT(any_non_null_column)會給出相同的COUNT(*)結果,因為沒有 NULL 值會導致差異。

一般來說,COUNT(*)應該更好,因為可以使用任何索引,因為COUNT(column_or_expression)可能沒有索引或 SARGable

來自ANSI-92(查找“ Scalar expressions 125”)

案子:

a) 如果指定了 COUNT(*),則結果是 T 的基數。

b) 否則,令 TX 為單列表,它是將 <value expression> 應用於 T 的每一行並消除空值的結果。如果消除了一個或多個空值,則提出完成條件:警告 - 在 set 函式中消除空值。

至少同樣的規則也適用於 SQL Server 和 Sybase

注意: COUNT(1) 與 COUNT(*) 相同,因為 1 是不可為空的表達式。

引用自:https://dba.stackexchange.com/questions/2511