我有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,感谢您的及时回复。这非常有帮助。您能否在“答案区域”输入您的答复并举个简短的例子,以便我可以采用? –
我的回答加快了您的查询速度吗? –