MS Access SQL查询转换为本地表后速度非常慢

MS Access SQL查询转换为本地表后速度非常慢,sql,ms-access,ms-access-2010,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_f

我有以下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 and repair”函数)

实际上,我认为最好的解决方案是去掉计算表达式,改为在联接中处理两个字段

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

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\u nr
vt\u recn
进行了索引。

根据创建本地表所用的方法,它可能缺少一些索引。此外,WHERE子句看起来并非如此,您可能正在进行一次表扫描(或多次表扫描),这可能会减慢速度。(顺便说一句,您的意思是“ODBC”,还是您的数据确实与数据库有关?)1.8 GB接近Access db文件的2 GB限制。是否还有足够的空间容纳查询尝试创建的新表(vrt_feldmarkpositionen)的大小?请尝试将PMMA_VT_FELDMARKPOSITION移动到单独的Access数据库。然后,在您当前的数据库中,将PMMA_VT_FELDMARKPOSITION链接到另一个数据库中的表。感谢您的建议,我将所有本地保存的数据库移到了单独的数据库中。主文件现在小于0,5 GB。然而,这个问题仍然存在。由我的脚本创建的结果表不大于1GB,因此大小不再是问题。