SELECT entity.Id, entity.Qybh, entity.Qymc, entity.Scxw, entity.Scxwqz, entity
       .Zlaq, entity.Zlaqqz, entity.Jsdw, entity.Jsdwqz, entity.Qt, entity.
       Qtqz, entity.Caldate, entity.Toatal, entity.Sequence, crit.Title,
       entity.Zzsequence
  FROM (SELECT * 
          FROM Pj_ToatalMark
         WHERE Caldate >= '2010-09-13 00:00:00'
               AND Caldate <= '2010-09-13 23:59:59'
               AND Typeid = 'ECB034F6E40C4E33A5F8C7587D112CB6') entity
left join Pj_Criterion crit on entity.Typeid = crit.Id 
left join Pj_QyZzdj zzdj on entity.Qybh = zzdj.Qybh
       WHERE  zzdj.Caldate >= '2010-09-13 00:00:00'
       AND zzdj.Caldate <= '2010-09-13 23:59:59'
       AND zzdj.Zzdj = '特级'
 ORDER BY
   entity.Toatal DESC,
   entity.Zzsequence ASC我这条语句执行的时候快的时候1秒,有时候5分钟,有时候52秒,最稳定的时候是8秒,这种情况是怎么回事?
是否是数据库的问题,需要怎么优化,或者说怎么解决!
用到程序页面时有时候有时候要等1分钟,可想而知客户郁闷了!

解决方案 »

  1.   

    SELECT entity.Id, entity.Qybh, entity.Qymc, entity.Scxw, entity.Scxwqz, entity
      .Zlaq, entity.Zlaqqz, entity.Jsdw, entity.Jsdwqz, entity.Qt, entity.
      Qtqz, entity.Caldate, entity.Toatal, entity.Sequence, crit.Title,
      entity.Zzsequence
    FROM Pj_ToatalMark entity
    left join Pj_Criterion crit on entity.Typeid = crit.Id  
    left join Pj_QyZzdj zzdj on entity.Qybh = zzdj.Qybh
    WHERE entity.Caldate >= '2010-09-13 00:00:00'
      and entity.Caldate <= '2010-09-13 23:59:59'
      AND Typeid = 'ECB034F6E40C4E33A5F8C7587D112CB6' 
      AND zzdj.Caldate >= '2010-09-13 00:00:00'
      AND zzdj.Caldate <= '2010-09-13 23:59:59'
      AND zzdj.Zzdj = '特级'
    ORDER BY
      entity.Toatal DESC,
      entity.Zzsequence ASC
      

  2.   

    语句基本没问题的,看看执行计划(ctrl + l),看看有没有table scan的部分,有的话请给相关字段加上index,就可以了。
      

  3.   


    你看看执行计划(ctrl + L),看看出现的图中有没有table scan(表扫描,非常耗时的),如果有就给涉及到的相应栏位加上index,用来提升查询效率。
      

  4.   

    谢谢,按照你的方法,时间稳定在2秒,我添加了qybh的索引,id是唯一索引