utl_match 比较许多记录

问题描述 投票:0回答:2

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

我需要比较一个表中的每条记录是否在另一个表上有类似的字符串。

问题是这个过程非常慢

我需要优化这个程序

对于表a (选择名字||''||姓氏作为员工的全名) 循环

选择计数(*) INTO num_cocidencias 来自表b 哪里 utl_match.jaro_winkler_similarity(b.name ,tablea .fullname) > 98

dbms_output.put_line(num_cocidencias); 结束循环;

oracle performance jaro-winkler utl-match
2个回答
1
投票

您确实意识到您正在进行 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

0
投票

UTL_MATCH 默认情况下不会并行运行,有关详细信息,请参阅此答案:

https://stackoverflow.com/a/79085866/6925323

© www.soinside.com 2019 - 2024. All rights reserved.