【问题标题】:SQl Query get data very slow from different tablesSQl Query 从不同的表中获取数据非常慢
【发布时间】:2013-12-20 21:56:27
【问题描述】:

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

这是我的查询

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 秒)获取数据。

【问题讨论】:

标签: sql sql-server performance join


【解决方案1】:

由于您似乎获得了每个帐户,并且性能很慢,我会尝试通过仅帐户创建一个预查询,然后对其他连接表进行单个连接,例如......

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 匹配的其他元素,但由于无论如何您只对帐号进行分组,使用哪个服务代码有关系吗?否则,您需要同时按帐户和服务代码进行分组(我会将服务代码添加到预查询中,并作为连接条件添加到帐户表中)。

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多