解决方案 »

  1.   

    CREATE INDEX INX_Table_APP_Data18
    ON [Table_APP_Data18]
    ([owner],[app],[jiqi])
      

  2.   

    若只有一个字段,使用COUNT(*);
    若有主键,使用COUNT(主键);
    若没有主键,使用COUNT(1)。我做大数据时,一般再建一个记录统计计数表,当数据表增加一条记录时,统计表计数也对应+1;数据表删除一条记录时,统计表计数也对应-1。在统计记录时,直接SELECT 统计表计数字段。
      

  3.   

    从语句看,消耗CPU的主要是编译,聚合计算。可以定义一个存储过程,带入参数。
     [owner]=@owner  and [app]=@app]  and [jiqi]=@app]如果对统计不严格,可以使用nolock,或者查询sysindexes的rows剩下的,加索引吧。
    附加:字段的类型是什么就给什么样的值。给不同的类型的值系统会隐式转换,不仅耗CPU,索引页用不了
      

  4.   


    谢谢你的解答。这个表使用周期就半个月,感觉没必要单独用一个表做统计(加删都要写),既然MSSQL提供COUNT和索引等功能干什么用笨方法那。
      

  5.   

    100万条数据量并不大。
    CPU占用居高不下应该不是没有索引的问题,当然加了索引会提高执行效率。问题主要应该是在asp查询请求时,针对不同的owner, app值,服务器都需要做一次硬解析。不能够使用cache中已有的解析结果。
    改asp的查询语句为绑定变量形式,提升效果应该会好。
      

  6.   


    以前有个误区任务count(*), count(1), count(PK)的效率是不一样的,不知道SQL server方面如何,Oracle中是无差别的。