MySQL: производительность с заявлениями о ситуации и как

Кто-нибудь знает, как подходить к такой ситуации?

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

Начал строить функции, используя операторы Case с LIKE & Regex, чтобы найти шаблоны, проблема, с которой я столкнулся, была производительность MySQL и очень-очень низкая.

Функции делают следующее: Удаление лишних пробелов, не буквенно-цифровых символов и стандартизация имен с помощью LIKE (почти 100 шаблонов), и я знаю, что это будет очень медленно, но я не уверен, какие еще варианты я смогу попробовать

Я имею в виду вариант, как сохранить все эти ключевые слова в таблицу с соответствующими исправленными значениями и использовать эту таблицу в качестве поиска для замены ключевых слов с помощью функции, это работает?

punctuation (could use REPLACE; not sure it there are more efficient options)
abbreviations (this is the tough one -- street = st, etc.)
Company/Restaurant/other Names standardizing: Like 
Universities to Univ, CENTER to CTR, AND to &, 
case 
when Businnes_name like '%SUBWAY%' then 'SUBWAY'
when Businnes_name like '%MCDONALDS%' then 'MCDONALD''S'
when Businnes_name like '%MCDONALD''S%' then 'MCDONALD''S'
when Businnes_name like '%STARBUCKS%' then 'STARBUCKS'
when Businnes_name like '%DUNKIN%DONUTS%' then 'DUNKIN'' DONUTS'
when Businnes_name like '%BURGER%KING%' then 'BURGER KING'

я получил всего 100 ключевых слов, как и выше заявления в функциях

-Спасибо

1 ответ

Очистку данных лучше всего выполнять на более полном языке программирования, а не на SQL. В прошлой жизни я обнаружил, что Perl был превосходным.

Сначала несколько s{}{}g команды, чтобы убрать некоторые вещи.

Затем sub с сотней строк, какreturn q{MCDONALD'S} if $str =~ m{McDonald's}i;

Затем - только тогда - сохранить данные в базе данных. (Вы можете выбрать столбец для оригинала (McDonald's) и столбец для канонической формы (MCDONALD'S).

Другие вопросы по тегам