主要是你的:select distinct 2,m.cus_no,convert(varchar(10),m.bil_dd,20),m.bil_no,round(m.amtn,2),round(m.amt,2),round(m.amtn_rcv,2),round(m.amt_rcv,2),
(select s.name from salm as s where s.sal_no=m.sal_no) as sal_no,
(select s.name from salm as s where s.sal_no=m.USR_NO) as usr_no,m.CUR_ID,m.REM,c.NAME,(select mf_pss.cus_os_no from mf_pss where mf_pss.ps_no=m.bil_no) as CUS_OS_NO  /*修改此处,*/
from CUST as c,MF_ARP as m,mf_pss as s
where c.CUS_NO=m.CUS_NO
/*and m.bil_no=s.ps_no  修改的第二处,新代码此处删去*/
and m.arp_id='1'
and m.BIL_DD between dateadd(dd,-1,@BegDate) and @EndDate
and m.CUR_ID like @CUR_ID
and m.CUS_NO like @CUS_NO
and m.usr_no like @USR_NO查询效率低,使插入超时,如果你不改SQL,改应用程序,让它不超时就可以了。另外,你的SQL语句,不太好,要效率高,要重改,并且相应的索引要建好!!

解决方案 »

  1.   

    主要是应用程序连接超时,可以修改Connetion的TimeOut属性。
      

  2.   

    m.bil_no=s.ps_no  ,这个应该是主键的关联吧,主键是都有索引的,所以主键的关联效率会高.
    至于你新改的,没有高效的索引.
      

  3.   

    如果保留m.bil_no=s.ps_no,就会屏蔽掉一些mf_arp表中的数据,去掉后的写法用一些数据库查询工具也可以查出来,只是不知道为什么在实际运行的时候就超时了。大家能否帮我优化一下那一段SQL?
      

  4.   

    (select s.name from salm as s where s.sal_no=m.sal_no) as sal_no,
    (select s.name from salm as s where s.sal_no=m.USR_NO) as usr_no这两个子查询有用吗?没见过同一个条件还能查询出不同的结果
    冒昧问一下:
    哥们可是用的天心ERP?
      

  5.   

    jcyluck,
        这两个子查询是有用的,它分别关联出业务员和制单员。是。你有什么好建议?
      

  6.   

    我已经解决了,把from CUST as c,MF_ARP as m,mf_pss as s中的“,mf_pss as s”去掉就OK了。不过还是要谢谢大家,接分吧。