Как сделать самостоятельное объединение на большом столе более эффективным? - PullRequest
0 голосов
/ 18 мая 2019

В настоящее время я пытаюсь найти потенциальных дублированных клиентов, созданных за последние 6 месяцев, которые соответствуют всем историческим клиентам в относительно большой (760 000+ строк) таблице. В моей ситуации 2 клиента классифицируются как одинаковые: значение DIFFERENCE 4 для имени и фамилии, разные идентификаторы клиентов и аналогичные DOB (либо клиент 1 DOB = клиент 2 DOB, либо клиент 1 DOB равен нулю, или клиент 2 DOB равен нулю). В настоящее время я пытаюсь достичь этого путем самостоятельного присоединения к таблице следующим образом:

SELECT *
FROM    (SELECT * FROM Customer c WHERE c.Created >= DATEADD(MONTH, -6, GETUTCDATE())) c1
JOIN    (SELECT * FROM Customer) c2 ON c1.CustomerID <> c2.CustomerID
WHERE   (c1.DOB IS NULL OR c2.DOB IS NULL OR c1.DOB = c2.DOB)
        AND DIFFERENCE(c1.FirstName, c2.FirstName) = 4
        AND DIFFERENCE(c1.LastName, c2.LastName) = 4

Когда я удаляю условие DOB, запрос работает достаточно хорошо (около 2 или 3 секунды для выполнения); однако, как только я добавляю это условие обратно, запрос просто продолжает вращаться до тех пор, пока моей машине не хватит памяти. Запрос также работает хорошо (хотя и немного медленно), когда нулевые проверки DOB не включены (т. Е. Только фрагмент c1.DOB = c2.DOB). Будем очень благодарны за любые советы о том, как я могу реорганизовать / оптимизировать этот запрос!

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