utl_match比较许多记录

时间:2017-05-31 21:03:45

标签: oracle performance jaro-winkler utl-match

我有2个表 - 一个有100万条记录,另一个有40000条记录。

我需要比较表中的每条记录,如果另一张表上有类似的字符串。

事情是这个程序很慢

我需要优化此程序

for tablea in (选择first_name ||'' || last_name作为员工的全名) 环

SELECT COUNT(*)       INTO num_coincidencias       从表b       WHERE utl_match.jaro_winkler_similarity(b.name,tablea .fullname)> 98

DBMS_OUTPUT.PUT_LINE(num_coincidencias); 结束循环;

1 个答案:

答案 0 :(得分:0)

您是否意识到您正在进行400亿次比较?无论您使用何种方法,这都需要很长时间。

将其转换为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