mssql sqlserver count(*),count(1)与count(列名)区别及性能对比


摘要:
下文从统计的结果上区分count(*) count(1) count(列名)的区别,如下所示:


功能说明
count(*):对数据表的行数进行计算,包含NULL
count(列名):对指定列的值的行数进行统计,不包含NULL值。
count(1):这个用法和count(*)的结果是一样的。

count(*) count(1) count(列名)性能说明
1.任何情况下SELECT COUNT(*) FROM [表名]是最优选择;
2.尽量减少SELECT COUNT(*) FROM [表名] WHERE 列名 = ‘值’ 这种查询;
3.杜绝SELECT COUNT(列名1) FROM [表名] WHERE 列名2 = ‘值’ 的出现。
————————————————
当数据表没有主键,count(1)比count(*)运行速度快。
当数据表存在主键时,count(主键,联合主键)比count(*)运行快。
当数据表只有一个字段时,count(*)最快。
————————————————
count(1)同count(主键)运行原理一致,只扫描主键。
count(*)同count(非主键)运行原理一样,扫描整个表,前者使用统计计划,效率会高一些。