繁体   English   中英

ms access中的sql查询存在太慢

[英]sql query in ms access with exists too slow

我有这个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)

但是现在速度仍然很慢。

编辑2

我有:

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

看起来WHERE子句是元凶。 这是对所有元组的模式匹配。 首先将其完全清除,然后重新定时创建teszt的第一个查询。 如果要快得多,那么您将需要其他策略。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM