Oracle
select count(*) 和 select count(any_non_null_column) 有什麼區別?
我似乎記得(在 Oracle 上)發聲
select count(*) from any_table
和select 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 是不可為空的表達式。