第四章 SQL聚合函数 COUNT(二)
权限
要使用COUNT(*),必须对指定的表具有表级别的SELECT权限。
要使用COUNT(column-name),必须对指定的列具有列级的权限,或者对指定的表具有表级的权限。
可以通过调用命令来确定当前用户是否具有权限。
可以通过调用方法来确定指定的用户是否具有表级权限。
性能
为了获得最优的性能,你应该按照以下方式定义索引:
- 对于
COUNT(*),如果需要,定义位图扩展索引。 这个索引可能是在创建表时自动定义的。 - 对于
COUNT(fieldname),为指定字段定义一个位片索引。 查询计划优化自动应用默认的排序规则到fieldname。
未提交事务所做的更改
与所有聚合函数一样,COUNT总是返回数据的当前状态,包括未提交的更改,而不管当前事务的隔离级别如何,如下所示:
- 插入和更新的记录的计数,即使这些更改尚未提交并可能回滚。
- 不计算已删除的记录,即使这些删除还没有提交并且可以回滚。
示例
下面的示例返回中的总行数:
SELECT COUNT(*) AS TotalPersons
FROM Sample.Person
下面的示例返回中的姓名、配偶和最喜欢的颜色的计数。这些计数不同,因为有些配偶和字段为;不计算:
SELECT COUNT(Name) AS People,
COUNT(Spouse) AS PeopleWithSpouses,
COUNT(FavoriteColors) AS PeopleWithColorPref
FROM Sample.Person
.png)


