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
因为您正在进行内部连接,您是否尝试将您的位置逻辑移动到您的连接子句中。 Sql将评估where子句的最后一项,并可能导致查询严重恶化。通过将该逻辑提升到一个水平,它应该更快。 – SFrejofsky
你的意思是把它移到ON? –
对不起,应该已经在条款,而不是加入条款 – SFrejofsky