【发布时间】:2019-12-16 12:50:09
【问题描述】:
包含超过 300 万行姓名(姓名、姓氏、父亲姓名)的表格。我希望检查相似性超过 90%。 我使用了许多模糊算法以及 utl_match 相似性(jaro_winkler、edit_distance)。 这些算法的性能不佳。 (超过 20 秒。) 我想检查变化的地方,但它的工作时间很长。像: 姓名 姓 父名, 姓名父亲姓氏, 姓 名 父名, ………… 我找不到任何性能良好的算法,它适用于事务系统。
【问题讨论】:
-
这听起来像是您可能首先想在 Oracle 之外脱机的事情。查看哪些工具/算法运行良好,然后如果您确实需要针对生产数据库执行此操作,请稍后再回来担心。
-
感谢您的建议,现在这不是问题,但我正在努力改进
-
您使用的是哪个版本的 Oracle?如果它是 11gR2 或更高版本,您应该查看 Oracle Text 的名称搜索扩展。这将表现良好,但不幸的是需要计划同步,因此它可能不适合事务应用程序。 Find out more.
-
在过度抱怨它运行缓慢之前,请考虑一下您要求 Oracle 完成的任务。如果没有某种预处理(参见@Thomas 的建议),您要求它针对 3M 行执行 3M 行; 9 万亿 (9,000,000,000,000) 次比较。在 3 次时,您抱怨这仍然是每秒 250 万次比较。这是非常快的 - 只是巨大的音量。你需要减少音量!
-
@belayer 一个名字检查 300 万,而不是 3 百万 x 3 百万。
标签: oracle plsql similarity fuzzy sentence-similarity