我有SQL Server代碼,需要很長時間來運行結果。過去花了15分鐘。但最近,可能由於積累的銷售數據,花了2個小時纔得到結果!SQL Server:通過多種連接關係優化效率
因此,我想獲得關於如何優化代碼的一些建議:
的代碼結構非常簡單:只是爲了獲得銷售款針對不同的時間段和每個SKU不同的區域。 (我已經刪除了一些代碼,這裏是找到不同尺寸的每種材料的不同SKU)。
非常感謝您的幫助。
的主要代碼結構是如下的,因爲它幾乎是一樣的,所以我只給第一2個段落作爲例子:上
SELECT SKU from [MATINFO]
-- Global Sales History Qty - All the years
\t \t \t LEFT JOIN
\t \t \t (
\t \t \t \t SELECT SKU,SUM([SALES Qty]) as [Global Sales History Qty - All the years]
\t \t \t \t from dbo.[SALES]
\t \t \t \t
\t \t \t \t where [PO] IS NOT NULL
\t \t \t \t group by SKU
\t \t \t)histORy
\t \t \t on MATINFO.[SKU]=histORy.[SKU]
-- Global Sales History Qty - Past 2 years
\t LEFT JOIN
\t \t \t (
\t \t \t \t SELECT (
\t \t \t \t \t SELECT SKU,SUM([SALES Qty]) as [Global Sales History Qty - All the years]
\t \t \t \t \t \t from dbo.[SALES]
\t \t \t \t
\t \t \t \t \t \t where [PO] IS NOT NULL
\t \t \t \t \t \t group by SKU
\t \t \t \t /* date range */
\t \t \t \t and ([ORDER DATE] = '2015.11' OR [ORDER DATE] = '2015.12' or [ORDER DATE] like '%2015%' OR [ORDER DATE] like '%2016%')
\t \t \t \t group by SKU
\t \t \t)histORy2
\t \t \t on MATINFO.[SKU]=histORy2.[SKU]
--Global Sales History Qty - Past 1 years
......SIMILAR TO THE CODE STRUCTURE AS ABOVE
在臨時表中實現派生表(帶有合適的索引),並改爲在您的宏查詢中使用臨時表。 –
@ TT,感謝您的及時回覆。這非常有幫助。您能否在「答案區域」輸入您的答覆並舉個簡短的例子,以便我可以採用? –
我的回答加快了您的查詢速度嗎? –