SQl Query从不同的表中获取数据非常慢

时间:2013-12-04 12:06:25

标签: sql sql-server performance join

我正在编写一个sql查询来从不同的表中获取数据,但它从非常慢的表中获取数据。 大约2分钟以上完成。 我在做什么在这里: 1.我得到数据差异,并代表日期差异,我得到帐号 我正在比较表格以获得我需要的确切数据。

这是我的查询

select T.accountno,
       MAX(T.datetxn) as MxDt,
       datediff(MM,MAX(T.datetxn), '2011-6-30') as Diffs, 
       max(P.Name) as POName 
from   Account_skd A,
       AccountTxn_skd T,
       POName P 
where  A.AccountNo = T.AccountNo and 
       GPOCode = A.OfficeCode and 
       Code = A.POCode and 
       A.servicecode = T.ServiceCode
group by T.AccountNo 
order by len(T.AccountNo) DESC

请帮助我如何使用连接或任何其他方式在5-10秒内在非常短的时间内获取数据。

1 个答案:

答案 0 :(得分:0)

由于看起来你收到了每个帐户,并且性能很慢,我会尝试通过帐户创建一个预查询,然后单独加入其他连接表,例如..

select 
      T.Accountno,
      T.MxDt,
      datediff(MM, T.MxDt, '2011-6-30') as Diffs, 
      P.Name as POName 
   from   
         ( select T1.AccountNo,
                  Max( T1.DateTxn ) MxDt
              from AccontTxn_skd T1
              group by T1.AccountNo ) T
         JOIN Account_skd A
            on T.AccountNo = A.AccountNo
            JOIN POName P
               on A.POCode = P.Code         <-- GUESSING as you didn't qualify alias.field 
              AND A.OfficeCode = P.GPOCode  <-- in your query for these two fields
   order by 
      len(T.AccountNo) DESC

您有其他基于T.ServiceCode匹配的元素,但由于您只是对帐号进行分组,是否重要使用了哪些服务代码?否则,您需要按帐户和服务代码进行分组(我将服务代码添加到预先查询中,并将其作为连接条件添加到帐户表中)。