gpt4 book ai didi

sql - 优化 Soundex 查询以查找相似的名称

转载 作者:行者123 更新时间:2023-12-01 02:31:28 26 4
gpt4 key购买 nike

我的应用程序将提供“听起来像”给定键入名称的英文名称建议列表。

需要优化查询并尽快返回结果。哪个选项最适合快速返回结果。 (或者你自己的建议,如果你有的话)

一个。生成 Soundex 哈希并将其存储在“名称”表中,然后执行类似以下操作:(这节省了每个查询至少为我的数据库中的每一行生成 soundex 哈希对吗?)

select name from names where NameSoundex = Soundex('Ann')

B.使用 Difference 函数(这必须为表中的每个名称生成 soundex?)

select name from names where Difference(name, 'Ann') >= 3

C.简单对比

select name from names where Soundex(name) = Soundex('Ann')

  • 选项 A 在我看来是最快的返回结果,因为它只为一个字符串生成 Soundex,然后与索引列“NameSoundex”进行比较

  • 选项 B 应该比选项 A 给出更多的结果,因为名称不必与 soundex 完全匹配,但可能会更慢

  • 假设我的表可能包含数百万行,什么会产生最好的结果?

最佳答案

您可以预先计算所有姓名的 DIFFERENCE() 并将它们存储在如下表中:

Differences
Name1
Name2
Difference


INSERT INTO Differences
(Name1,Name2,Difference)
SELECT
n1.Name,n2.Name,DIFFERENCE(n1.Name,n2.Name)
FROM Names n1
CROSS JOIN Names n2
WHERE DIFFERENCE(n1.Name,n2.Name)<??? --to put a cap on what to store

如果用户输入您现有的名称之一,您很快就会有所不同。如果用户输入的名称不在您的名称表中,您可以执行选项 A 或 B。您甚至可以在选择列表中让他们选择“差异”。零将是您的选项 A,任何值将使用选项 B,首先尝试使用差异表,然后使用强力表扫描 WHERE DIFFERENCE(@givenName,Names.Name)<@UserSelectLevel

关于sql - 优化 Soundex 查询以查找相似的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2643146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com