0
我有這樣的SQL查詢: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
你可以嘗試左連接而不是不存在,但它可能不會很好。問題是你的所有標準都是基於功能的。這意味着每一行都必須進行處理/評估,因此不能使用索引。如果您將用於where&join子句條件的數據分解爲單獨的字段並將其編入索引,您將看到顯着的改進。 – AVG
「如果您將用於where&join子句條件的數據分解爲單獨的字段」 - 我可以通過修改sql查詢來完成嗎?如果是,如何? – derstauner