MS Access,Inventory Levels查询耗时太长。备择方案?

时间:2016-02-02 13:26:31

标签: sql ms-access

我有一张桌子可以生成许多SKU的每日更改。 它还增加0,因为报告需要它们。

目前生成大约60,000条数据记录,如下图所示: Inventory Report Table

然后我有一个如下所示的查询:

SELECT t1.Date, t1.[Part SKU], t1.[SKU Name], t1.[Inventory Change], (SELECT SUM(t2.[Inventory Change]) 
    FROM [Inventory Report Table] t2
    WHERE t1.[Date] >= t2.[Date]
    AND t1.[Part SKU] = [t2.Part SKU]) AS [Inventory Level]
FROM [Inventory Report Table] AS t1
ORDER BY t1.Date, t1.[Part SKU];

此查询的基本操作是它根据零件SKU汇总所有记录,其中日期> =该SKU的日期。

给出这样的结果: enter image description here

问题是,这需要太长时间。 我一直试图为此找到解决方法......

但我被困了

2 个答案:

答案 0 :(得分:2)

这是您的查询:

SELECT t1.Date, t1.[Part SKU], t1.[SKU Name], t1.[Inventory Change],
       (SELECT SUM(t2.[Inventory Change]) 
        FROM [Inventory Report Table] t2
        WHERE t1.[Date] >= t2.[Date] AND t1.[Part SKU] = [t2.Part SKU]
       ) AS [Inventory Level]
FROM [Inventory Report Table] AS t1
ORDER BY t1.Date, t1.[Part SKU];

为了提高性能,我会尝试以下两个索引:[Inventory Report Table](Date, [Part SKU])[Inventory Report Table]([Part SKU], Date)。是的,两者都是可取的,一个用于子查询,一个用于外部查询。

这可能会有所帮助。但是,您真正需要累积和功能。您可以考虑升级到提供此功能的SQL Server或Postgres等数据库。

答案 1 :(得分:0)

可以是:

SELECT t1.DATE
    ,t1.[Part SKU]
    ,t1.[SKU Name]
    ,t1.[Inventory Change]
    ,SUM(t2.[Inventory Change])  AS [Inventory Level]

FROM [Inventory Report Table] AS t1
left join [Inventory Report Table] t2
on t1.[Part SKU] = [t2.Part SKU]

WHERE t1.[Date] >= t2.[Date]

group by t1.DATE
    ,t1.[Part SKU]
    ,t1.[SKU Name]
    ,t1.[Inventory Change]

ORDER BY t1.DATE
    ,t1.[Part SKU];

PS:我还没有测试查询,这只是一个想法。