2017-10-12 118 views
1

我正在编写一个SQL查询来提取制造数据,并计算出每月与输出相比的成本。查询结构非常庞大(超过4个查询,超过200行)。它需要超过5分钟才能运行。我不认为我真的让它完全运行。SQL查询需要10分钟以上的时间才能运行,需要26秒才能拆分两次

生产成本部分需要13秒才能运行。我无法理解如何运行报告的其余部分需要很长时间。所以把生产成本放在一张表中,并使用表格运行销售报告。瞧!现在销售报告需要13秒!

现在我怎样才能使我的查询只需要26秒运行?

以下是销售报表查询中用于提取生产成本的一行。 [Production Cost Per Job]是生产成本查询。

OUTER APPLY (
    SELECT TOP 1 
     bpc.StartingMonth, 
     bol.[Item No_] as ItemNo, 
     SUM(bpc.Amount)/SUM(bpc.Quantity) as Cost 
    FROM "Production Output Line" as bol 
    INNER JOIN [Production Cost Per Job] as bpc 
     ON bol.[JobID] = bpc.[JobID] 
     AND bol."Output Item Size" = bpc.ItemSize 
     AND DATEDIFF(mm, 0, bol.[Starting Date]) = bpc.StartingMonth 
    WHERE bpc.Quantity <> 0 
    AND bpc.StartingMonth <= a.MonthDate 
    AND bpc.StartingMonth >= 1380 -- January 2015 
    AND bol.[Item No_] = a.ItemNo 
    GROUP BY bpc.StartingMonth, bol.[Item No_] 
    ORDER BY bpc.StartingMonth 
) as b 
+0

因为您正在进行内部连接,您是否尝试将您的位置逻辑移动到您的连接子句中。 Sql将评估where子句的最后一项,并可能导致查询严重恶化。通过将该逻辑提升到一个水平,它应该更快。 – SFrejofsky

+0

你的意思是把它移到ON? –

+0

对不起,应该已经在条款,而不是加入条款 – SFrejofsky

回答

1

根据你的逻辑,我觉得像下面这样会很有效的工作(我不知道你有a,所以我刚刚创建a.a_rows还有MonthDate场):

SELECT 
    a_rows 
    , MonthDate 
    , StartingMonth 
    , ItemNo 
    , Cost 
FROM 
    (
     SELECT 
      a_rows 
      , MonthDate 
      , StartingMonth 
      , ItemNo 
      , Cost 
      , ROW_NUMBER() OVER (PARTITION BY a_rows, MonthDate ORDER BY StartingMonth) R 
     FROM 
      (
       SELECT 
        a.a_rows 
        , a.MonthDate 
        , bpc.StartingMonth 
        , bol.[Item No_] ItemNo 
        , SUM(bpc.Amount)/SUM(bpc.Quantity) Cost 
       FROM 
        [a] a 
        LEFT JOIN [Production Output Line] bol ON bol.[Item No_] = a.ItemNo 
        LEFT JOIN [Production Cost Per Job] bpc ON 
         bpc.StartingMonth <= a.MonthDate 
         AND bpc.StartingMonth >= 1380 
         AND bpc.Quantity <> 0 
       GROUP BY 
        a.a_rows 
        , a.MonthDate 
        , bpc.StartingMonth 
        , bol.[Item No_] 
      ) Q 
    ) Q2 
WHERE R = 1 
相关问题