1
SQLクエリーを作成して製造データを取得し、出力と比較して月あたりのコストを把握しています。クエリの構造は大規模です(4つのクエリに対して200以上の行)。実行には5分以上かかります。私は実際にそれが完全に実行されるとは思わない。SQLクエリーを実行するには10以上の時間がかかり、2回に分割すると26秒かかります
製造コストの部分は、実行に13秒かかります。私は、レポートの残りの部分を実行するにはどうしたら時間がかかるのか理解できませんでした。そこで、生産コストをテーブルに投棄し、テーブルを使用して販売レポートを実行しました。 Voila!今、売上レポートには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
あなたが内部結合をしているということは、where論理を結合節に移そうとしたことです。 Sqlはwhere句を最後に評価し、クエリの深刻な劣化を引き起こす可能性があります。そのロジックをレベルアップさせることではるかに高速になるはずです。 – SFrejofsky
あなたはそれをONに動かすことを意味しますか? –
はい申し訳ありませんが、on節とjoin節ではありませんでした。 – SFrejofsky