SQL-запрос занимает слишком много времени, чтобы вернуть дубликаты таблицы - PullRequest
0 голосов
/ 28 июня 2019

Я настраиваю приложение для поиска дубликатов счетов. У меня есть запрос 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

Мне нужен только способ оптимизации запроса, чтобы он мог быстрее возвращать поиск дубликатов.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...