如何提高 strcmp mysql 比较相似字符串的性能

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

我希望这不是一个愚蠢的问题。我环顾四周,找不到任何像我这样的问题,但是......

我有一个包含人员数据的表,我们知道其中存在重复项。该表包含超过 30k 条目,并且正在不断增长。预计最大容量约为 100k。 我正在运行一个过程来找出重复的条目,但是,这是但是...重复的条目是“相似”的条目,而不是完全重复的条目。

标准如下:如果属于同一组且名称相似,我们认为重复。

同一组只是与另一个表的联接,正确索引等。该部分工作正常。

相似名称是指忽略大小写、修剪并忽略内部空格的相同名称。所以“joHn smith”(初始空格)等于“JOHN SMITH”(中间和最后空格)并且等于“john smith”(初始、中间和最后空格)。

我的初始策略非常慢:我有一个视图和一个存储解析视图的策略。存储会将重复的条目一一删除,因为重复的删除很复杂并且会影响其他几个表。

存储的工作效率或多或少,但视图很糟糕。

该视图将表与人员连接到其自身,并且计划显示,当然,问题在于每次比较时对人员表的完整扫描:

strcmp(替换(lcase(修剪(

s
name
)),'',''),替换(lcase(修剪(
t
name
)),'',''))= 0

请注意 s。和T。参考同人的表。

有什么建议吗?

非常感谢。

mysql performance text comparison strcmp
1个回答
0
投票

我会做的是这样的:

  1. 添加一个新列来保存规范名称;例如名称转换为全部大写,并删除了无关的空格和其他字符。
  2. 填充该列。
  3. 为列添加索引。
  4. 通过按规范名称顺序读取记录并合并/以其他方式处理重复记录来消除重复。

粗略来说,复杂度如下:

  1. 是O(1)。
  2. 是 O(N)。
  3. 是 O(NlogN)。
  4. 是O(N)。每条记录的复杂度为 O(1)!

我认为...

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