我有这个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)
但现在速度仍然很慢。
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
答案 0 :(得分:0)
看起来WHERE子句是罪魁祸首。它是针对所有元组的模式匹配。首先完全解决这个问题,然后重新计算创建teszt的第一个查询。如果它快得多,那么你将需要一个不同的策略。