Я настраиваю приложение для поиска дубликатов счетов. У меня есть запрос SQL, чтобы проверить наличие дубликатов более 5 столбцов и вставить результаты в таблицу с именем TblDuplicate
Код работает нормально, но на поиск одного дубликата в таблице с 500 000 записей уходит слишком много времени, более 2 минут.
Это запрос SQL:
BEGIN
INSERT INTO TblDuplicate (PostingDate, DocumentDate, Reference, URN, Supplier, AMOUNT,
ST, InputSource, DocumentNumber, NEWREF, NEWAMOUNT,
CHECK1, CHECK2, CHECK3, CHECK4, CHECK5)
SELECT
PostingDate, DocumentDate, Reference, URN, Supplier, AMOUNT,
ST, InputSource, DocumentNumber, NEWREF, NEWAMOUNT,
CHECK1, CHECK2, CHECK3, CHECK4, CHECK5
FROM
(SELECT
h.PostingDate, h.DocumentDate, h.Reference, h.URN, h.ST,
h.Supplier, h.AMOUNT, h.InputSource, h.DocumentNumber,
h.NEWREF, h.NEWAMOUNT, h.CHECK1, h.CHECK2, h.CHECK3, h.CHECK4, h.CHECK5
FROM
TblHistory h
INNER JOIN
TblDaily tmp ON tmp.CHECK1 = h.CHECK1
OR tmp.CHECK2 = h.CHECK2
OR tmp.CHECK3 = h.CHECK3
OR tmp.CHECK4 = h.CHECK4
OR tmp.CHECK5 = h.CHECK5
UNION ALL
SELECT
h.PostingDate, h.DocumentDate, h.Reference, h.URN, h.ST,
h.Supplier, h.AMOUNT, h.InputSource, h.DocumentNumber, h.NEWREF, h.NEWAMOUNT,
h.CHECK1, h.CHECK2, h.CHECK3, h.CHECK4, h.CHECK5
FROM
TblDaily h
INNER JOIN
TblDaily tmp ON tmp.CHECK1 = h.CHECK1
OR tmp.CHECK2 = h.CHECK2
OR tmp.CHECK3 = h.CHECK3
OR tmp.CHECK4 = h.CHECK4
OR tmp.CHECK5 = h.CHECK5) AS AllData
END
Мне нужен только способ оптимизации запроса, чтобы он мог быстрее возвращать поиск дубликатов.
Спасибо