Повышение производительности при использовании алгоритмов Левенштейна и Саундекса при поиске в MySQL

Мы пытаемся загрузить данные из 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

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]