select COUNT(1) from dbo.Project
select  COUNT(*)  from dbo.Project
select  COUNT(ProjectID)  from dbo.Project有和区别?结果都一样啊.

解决方案 »

  1.   


    use pubs;
    go
    set statistics time on;
    go
    select COUNT(1) from dbo.authors;
    go
    select COUNT(*) from dbo.authors;
    go
    select COUNT(au_id) from dbo.authors; --au_id是主键
    go
    set statistics time on;
    go
    /*结果
    SQL Server 分析和编译时间: 
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。(1 行受影响) SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。(1 行受影响) SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。(1 行受影响) SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    SQL Server 分析和编译时间: 
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 SQL Server 执行时间:
       CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    */
      

  2.   

    一般没什么区别,但在group by 中使用就有区别了
    1. select COUNT(1) from dbo.Project group by ProjectID
    2. select COUNT(*) from dbo.Project group by ProjectID
    3. select COUNT(ProjectID) from dbo.Project group by ProjectID第一种是对第一列进行计量,如果有为null的,则不计数 
    第二种不考虑任何情况,包括本列有空的记录也进行计数第三种有些类似第二种,ProjectID为空的记录会专门分组,所以除非是统计为空的这组,
    其他的任何组的统计结果都和第二种相同 
     
      

  3.   

    ProjectID为空时有空值的时候估计就不一样了...count(1) 和count (*)不知道
      

  4.   

    我试了一下,这3种写法的执行计划是一模一样的,所以我觉得确实没什么差别,但是我记得以前看过点什么资料,说count(×)是运行最快的
      

  5.   

    如果列中有null值,结果是不一样的。
      

  6.   

    基本没什么区别吧,sqlserver会进行内部处理转换的。
      

  7.   

    对于Null值得处理不太一样。