下面的SQL查询,当日期在时间间隔不大时比如开始和结束日期都是03/31/03时大约用18秒,而当开始和结束时间是03/01/03,03/31/03也就是说查一个月的数据时特别慢曾经等待30分钟没有出来,请各位大侠帮忙修改一下提高查询速度。SELECT matltran.ref-num,matltran.ref-line-suf,matltran.loc,matltran.item,item.description,SUM(matltran.qty)
FROM matltran,item,jobroute
WHERE matltran.item=item.item AND matltran.ref-num=jobroute.job AND matltran.ref-line-suf=jobroute.suffix
AND matltran.qty<>0 AND (matltran.trans-type)="f"
AND matltran.trans-date>=03/31/03
AND matltran.trans-date<=03/31/03
AND jobroute.wc='GZZX'
GROUP BY matltran.ref-num,matltran.ref-line-suf,matltran.loc

解决方案 »

  1.   

    30分钟?可能吗?你有多少条数据。
    我看sql语句没问题,几种方法你试试:
    1、变成后台存储过程;
    2、把你的语句放到sql server的Query Analyzer中试一下速度,如果不是30分钟,那看一下是否你数据库控件其它事件消耗时间。
      

  2.   

    真的是30分钟,我的后台数据库是progress,我好像不会使存储过程,
      

  3.   

    將Where條件的各個條件的先後順利換一下試試,另外為查詢的主要字段建立索引,如:matltran表的item字段,item表的item字段,matltran的ref-num及jobroute的job字段,matltran的trans-type 與trans-date字段 ,jobroute的wc字段都可建立相關的索引,當然需視實際需要而建立,數據檢索的快慢很大一個程序上是依賴於數據庫表的設計,而最重要的就是索引的合理建立如變換查詢次序為:
    SELECT matltran.ref-num,matltran.ref-line-suf,matltran.loc,matltran.item,item.description,SUM(matltran.qty)
    FROM matltran,item,jobroute
    WHERE  matltran.trans-date>=03/31/03
    AND matltran.trans-date<=03/31/03
    AND matltran.qty<>0 AND (matltran.trans-type)="f"
    AND jobroute.wc='GZZX'
    AND matltran.item=item.item AND matltran.ref-num=jobroute.job
    AND matltran.ref-line-suf=jobroute.suffix
    GROUP BY matltran.ref-num,matltran.ref-line-suf,matltran.loc
      

  4.   

    如果matltran.qty已经建了索引的话就不要用不等号(<>)因为不等号不会利用索引的,你要改成matltran.qty>0 and matltran.qty<0