在mysql中使用levenshtein和soundex算法搜索时提高性能

e5nszbig  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(378)

我们正在尝试将数据从excel上传到数据库。在上传之前,我们希望预览数据与匹配状态的计数(例如:无匹配,相似匹配,完全匹配),同时与我们的数据库进行比较。
下面的查询需要3分钟从数据库中获取100行的信息。我们将有一个用户可以上传超过5k行数据的情况。请告知我们您对改进以下查询性能的建议。

select IF(
    count(distinct ID) <= 0, (
        select case when count(ID) > 0 then 'Similar Match' else 'No Match' end as MatchType from masterTable where (
            soundex(BarCode) like soundex('12069B0') or soundex(ProductName) like soundex('FreezerZX')
        ) and (
            levenshtein(BarCode,'12069B0') < 3 or (levenshtein(ProductName,'FreezerZX') < 3)
        )
    ), 
    'Exact Match'
) as MatchType from masterTable where BarCode= '12069B0' and ProductName= 'FreezerZX';
gj3fmq9x

gj3fmq9x1#

如果没有一个简单的“相似匹配”算法,我建议你放弃用计算机完成整个任务。人类的大脑非常擅长相似性测试,所以我们再加上。。。
按要在中检查重复或接近重复的列对数据进行排序。垂直显示该列表。直观地浏览列表。
用重复 REVERSE(col) . 这将发现在弦的早期有根本性差异的对,但是在弦的末端匹配得更好。
根据需要对其他列重复此操作。

相关问题