Повышение производительности при использовании алгоритмов Левенштейна и Саундекса при поиске в MySQL - PullRequest
0 голосов
/ 28 мая 2018

Мы пытаемся загрузить данные из Excel в базу данных.Перед загрузкой мы хотели бы предварительно просмотреть данные со счетчиком статуса соответствия (например, нет совпадения, аналогичное совпадение, точное совпадение) при сравнении с нашей базой данных.

Приведенный ниже запрос занимает 3 минуты времени для извлечения информации из базы данных на 100 строк.У нас будет случай, когда пользователь может загрузить более 5K строк данных.Пожалуйста, дайте нам знать ваши предложения по повышению производительности нижеуказанного запроса.

select IF(
    count(distinct ID) <= 0, (
        select case when count(ID) > 0 then 'Similar Match' else 'No Match' end as MatchType from masterTable where (
            soundex(BarCode) like soundex('12069B0') or soundex(ProductName) like soundex('FreezerZX')
        ) and (
            levenshtein(BarCode,'12069B0') < 3 or (levenshtein(ProductName,'FreezerZX') < 3)
        )
    ), 
    'Exact Match'
) as MatchType from masterTable where BarCode= '12069B0' and ProductName= 'FreezerZX';

1 Ответ

0 голосов
/ 29 мая 2018

Без простого алгоритма «аналогичного соответствия» я рекомендую отказаться от выполнения всей задачи с компьютером.Человеческий мозг очень хорош в тестах на сходство, поэтому давайте добавим его в ...

Сортировка данных по столбцу, в котором вы хотите проверить наличие дупла или дурака. Отобразите этот список по вертикали.Визуально просмотрите список.

Повторите с REVERSE(col).Это определит пары, у которых были радикальные различия в начале строки, но лучше совпадали в конце.

Повторите для других столбцов, если необходимо.

...