转换为本地表后,MS Access SQL查询速度极慢

时间:2016-03-16 16:41:23

标签: sql ms-access ms-access-2010

我有以下SQL查询

SELECT
    pmma_vt_feldmarkposition.vtvt_recn AS [li_verträge_recn],
    pmma_vt_feldmarkposition.feldmark AS [vt_feldmark_nr_pflanze],
    switch (gbs is null, gbs_opti, gbs is not null, gbs) AS [ta_istbeitragssatz_hagel],
    NZ(pmma_vt_feldmarkposition.ebs_sturm, 0) + NZ(pmma_vt_feldmarkposition.ebs_frost, 0) + NZ(pmma_vt_feldmarkposition.ebs_wolkenbruch, 0) + NZ(pmma_vt_feldmarkposition.ebs_hochwasser, 0) + NZ(pmma_vt_feldmarkposition.ebs_trockenheit, 0) + NZ(pmma_vt_feldmarkposition.ebs_pauschal, 0) AS [ta_istbeitragssatz_elementar],
    switch (gbs is null, gbs_opti, gbs is not null, soll_gbs) AS [ta_sollbeitragssatz_hagel]    
INTO
    vrt_feldmarkpositionen
FROM 
    PMMA_VT_FELDMARKPOSITION
WHERE
    pmma_vt_feldmarkposition.lfd_nr * 1000000000 + pmma_vt_feldmarkposition.vtvt_recn 
    IN (
        SELECT MIN(pmma_vt_feldmarkposition.lfd_nr * 1000000000 + pmma_vt_feldmarkposition.vtvt_recn) AS minhelper
        FROM pmma_vt_feldmarkposition
        GROUP BY pmma_vt_feldmarkposition.vtvt_recn
    );

pmma_vt_feldmarkposition曾经链接到我的ODBC数据库,并且查询运行没有问题。现在,我将链接转换为本地表(也称为pmma_vt_feldmarkposition,删除了指向数据库的链接)以便能够脱机工作 - 但查询会一直运行而不会完成。我没有收到任何错误消息。

这可能是什么原因?可能是因为我的.accdb文件现在大了1,8GB吗? (我保存了一些本地表并已使用" compact和repair"功能)

1 个答案:

答案 0 :(得分:1)

实际上,我认为最好的解决方案是摆脱计算的表达式,而是在JOIN中使用这两个字段。

简化查询的第一部分,这将是:

SELECT
    fields
FROM 
    PMMA_VT_FELDMARKPOSITION T
INNER JOIN (
    SELECT MIN(lfd_nr) AS MinLfdNr, vtvt_recn
    FROM pmma_vt_feldmarkposition
    GROUP BY vtvt_recn
) AS MinGrp
    ON  T.lfd_nr = MinGrp.MinLfdNr
    AND T.vtvt_recn = MinGrp.vtvt_recn

至少我认为这应该返回与查询相同的结果。

如果需要,可以通过将子查询结果存储在临时表中来进一步提高性能。

确保将lfd_nrvtvt_recn都编入索引。