是否可以为 string/uuid-based 主键创建索引以便能够通过相似性进行快速搜索(例如嘈杂的 uuid)?

Is it possible to create indexes for a string/uuid-based primary key to be able to fast search by similarity (e.g. noisy uuids)?

我会给出具体的案例,以便更好地理解。 我有一些代码,我将在这里调用来自 OCR 的 UUID。

例如,在 25 个字符中,有几个被错误识别了。 是否可以在 SQL 数据库中“按相似性索引”UUID 列?

假设每个 UUID 只有一个字符错误并且我执行 25 次查询,SELECT ... LIKE 语句是否已经具有良好的行为?

[吵闹的uuid就不插了,就SELECT编了。]

抱歉,我不知道是否有这样做的内置功能,但您正在尝试做的是一种称为 Levenshtein 距离的算法。看看那个:

定义: https://en.wikipedia.org/wiki/Levenshtein_distance#:~:text=Informally%2C%20the%20Levenshtein%20distance%20between,considered%20this%20distance%20in%201965.

使用SQL: https://lucidar.me/en/web-dev/levenshtein-distance-in-mysql/#:~:text=Informally%2C%20the%20Levenshtein%20distance%20between,not%20match%20exactly%20the%20fields.

您应该修复进入数据库的数据——或者至少拥有原始代码和推算代码。

如果您需要保留原始代码,那么我的建议是 look-up table 包含原始代码和推算代码。此 table 将用于要按实际代码过滤的查询。

举一个具体的例子,如果我有一个包含美国州缩写的列并且其中一个代码是 RA,我不想“自动”弄清楚这是不是:

  • AR 向后(阿肯色州)
  • RI(罗德岛)
  • CA(加利福尼亚州)
  • MA(马萨诸塞州)
  • 宾夕法尼亚州(宾夕法尼亚州)
  • VA(弗吉尼亚州)
  • WA(华盛顿)

似乎需要手动操作。