set @sumresult1  = (select count(pallets_L2Code) from TransHistory_Temptable where  AssignmentNo_Var = @tempAssignmentNum and pallets_L2Code =11)
数据库里纪录条数是19000条, 我测试了,就这条语句占用了太多时间,有没有好的优化语句,实在想不出了. 用游标也是一样花时间

解决方案 »

  1.   

    select   count(聚集索引列)   from   TransHistory_Temptable   where     AssignmentNo_Var(键聚集索引)   =   @tempAssignmentNum   and   pallets_L2Code(键非聚集,有必要和AssignmentNo_Var键复合索引)   =11
      

  2.   

    count(pallets_L2Code) 改为count(1)
    AssignmentNo_Var/pallets_L2Code检查有没有建索引,没有时建上
      

  3.   

    好像看不出有什么可以优化的,一个很简单的SQL。LZ说占时间,多少时间?
    索引有没有?
      

  4.   

    pallets_L2Code和AssignmentNo_Var列加上索引
      

  5.   

    谢谢大家的回复,这个语句是用在一个2W条纪录的数据库里,但是要根据信息循环的查找,所以感觉数据量总的来说应该不小,按照大家的回复,速度提高了很多,能在10秒左右完成任务了,时间是能接受了,但是CPU一直很高,我就在普通的电脑上运行,Intel Core(TM)2 Cpu ,1.7G memory.cpu很高的问题怎么解决呢? 谢谢大家先
      

  6.   

    这个问题不好解决!
    select   @sumresult1  =    count(pallets_L2Code)   from   TransHistory_Temptable   where     AssignmentNo_Var = @tempAssignmentNum   and   pallets_L2Code   =11
    这样标准点,看看执行计划,是否用了索引?如果用到了,可能无法再优化了
    (如果这样双条件的多,键个复合索引能快)
      

  7.   

    19000条,太少了。
    你的sql语句也不复杂,最好是对(AssignmentNo_Var,pallets_L2Code)建索引。
      

  8.   

    现在速度不是问题,关键是CPU.(19000是原始的,但是如果加上中间复杂的查询,问题是中间我还要对数据进行判断是否有效,然后还有删除操作之类的,可能CPU不是这个语句造成的,现在想问问,大家做数据库的时候CPU的问题怎么解决.