utl_match сравнивает много записей
У меня есть 2 таблицы - одна с 1 миллионом записей, а другая с 40000 записями.
Мне нужно сравнить для каждой записи в таблице, если есть аналогичная строка в другой таблице.
дело в том, что эта процедура очень медленная
Мне нужно оптимизировать эту процедуру
для таблицы в цикле (выберите first_name||' '||last_name в качестве полного имени сотрудника)
ВЫБЕРИТЕ COUNT(*) INTO num_coincidencias ИЗ таблицы b ГДЕ utl_match.jaro_winkler_simility(b.name,tablea .fullname) > 98
DBMS_OUTPUT.PUT_LINE (num_coincidencias); концевой цикл;
1 ответ
Вы понимаете, что делаете 40 миллиардов сравнений? Это займет много времени, независимо от того, какой метод вы используете.
Превращение этого в оператор SQL устранит переключение контекста, я не знаю, есть ли у вашего компьютера ресурсы, чтобы сделать все это в одном выражении SQL:
SELECT COUNT (*) c, a.first_name || ' ' || a.last_name full_name
FROM employee a CROSS JOIN tableb b
WHERE UTL_MATCH.jaro_winkler_similarity (b.first_name, a.first_name || a.last_name) > 98
GROUP BY a.first_name || ' ' || a.last_name