ms访问的SQL查询存在太慢

时间:2015-12-05 14:14:08

标签: sql ms-access

我有这个SQL查询:

SELECT sb,
       suchbegriff_artnr,
       suchbegriff_lfdnrkal
FROM
  (SELECT kvks.artnr & '/' & kvks.[lfdnr-kal] AS sb,
          VAL(LEFT(kvks.suchbegriff, 6)) AS suchbegriff_artnr,
          VAL(RIGHT(kvks.suchbegriff, 4)) AS suchbegriff_lfdnrkal
   FROM kvks
   WHERE kvks.suchbegriff LIKE '*/*')
WHERE NOT EXISTS
    (SELECT 1
     FROM stammdat
     WHERE stammdat.artnr=suchbegriff_artnr
       AND stammdat.[lfdnr-kal]=suchbegriff_lfdnrkal)

它执行,但速度太慢。需要花费5秒钟。 kvks表包含大约70k条记录,stammdat表大约包含4,5k条记录。 在这个查询中,我希望得到kvks表中的记录,这些记录根据两个条件不在stammdat表中。

stammdat.artnrstammdat.[lfdnr-kal]是整数。

我怎样才能加快这个查询的速度?

修改

我写了一个查询,我存储了查询的一半:

INSERT INTO teszt
SELECT kvks.artnr AS sb_artnr,
       kvks.[lfdnr-kal] AS sb_lfdnrkal,
       LEFT(kvks.suchbegriff,6) AS suchbegriff_artnr,
       RIGHT(kvks.suchbegriff,4) AS suchbegriff_lfdnrkal
FROM kvks
WHERE kvks.suchbegriff LIKE '*/*'

然后我不需要这个功能:

SELECT teszt.sb_artnr,
       teszt.sb_lfdnrkal,
       teszt.suchbegriff_artnr,
       teszt.suchbegriff_lfdnrkal
FROM teszt
WHERE NOT exists
    (SELECT 1
     FROM stammdat
     WHERE stammdat.artnr=teszt.suchbegriff_artnr
       AND stammdat.[lfdnr-kal]=teszt.suchbegriff_lfdnrkal)

但现在速度仍然很慢。

EDIT2

我拥有它:

SELECT teszt.sb_artnr,
       teszt.sb_lfdnrkal,
       teszt.suchbegriff_artnr,
       teszt.suchbegriff_lfdnrkal
FROM teszt
LEFT JOIN stammdat ON stammdat.artnr=teszt.suchbegriff_artnr
AND stammdat.[lfdnr-kal]=teszt.suchbegriff_lfdnrkal
WHERE stammdat.artnr IS NULL

1 个答案:

答案 0 :(得分:0)

看起来WHERE子句是罪魁祸首。它是针对所有元组的模式匹配。首先完全解决这个问题,然后重新计算创建teszt的第一个查询。如果它快得多,那么你将需要一个不同的策略。