[英]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.artnr
和stammdat.[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.