Sql 为表联接创建多个索引以适应模糊匹配

Sql 为表联接创建多个索引以适应模糊匹配,sql,indexing,Sql,Indexing,我正在尝试将用户提供的邮政地址数据与地址引用数据集相匹配。我想为这两个数据集编制索引,并在索引字段上联接。在一个完美的世界中,这将使用一个包含完整地址的键(例如,其中REF_ADDR=INPUT_ADDR将给出100w Main St,Springfield,OH 45502=100w Main St,Springfield,OH 45502)。当然,地址很少是完美的,所以我有一个脚本,可以使用模糊逻辑来适应差异。但是,因为这个脚本非常慢,所以我希望在使用之前减少参考数据集中的候选对象数量,以尝

我正在尝试将用户提供的邮政地址数据与地址引用数据集相匹配。我想为这两个数据集编制索引,并在索引字段上联接。在一个完美的世界中,这将使用一个包含完整地址的键(例如,
其中REF_ADDR=INPUT_ADDR
将给出
100w Main St,Springfield,OH 45502=100w Main St,Springfield,OH 45502
)。当然,地址很少是完美的,所以我有一个脚本,可以使用模糊逻辑来适应差异。但是,因为这个脚本非常慢,所以我希望在使用之前减少参考数据集中的候选对象数量,以尝试对其进行匹配。为了找到所有潜在的候选项,我打算创建一个索引键,该索引键是从用于连接的各个地址组件派生的。问题是,单凭一个密钥无法捕获所有可能的候选密钥。我可能需要创建多个索引键以捕获所有候选项

例如,地址
100 W Main St,Springfield,OH 45502
100 WMNST 455
形式的索引键在大多数情况下都是好的,但可能有任意数量的地址错误不会被此类键捕获。为了适应匹配过程将识别的所有潜在错误,我可能需要实现至少几个索引键来加入

我想知道是否有人对处理这个问题有什么建议。参考数据集由4000万条记录组成,用户提供的地址数据通常约为10000条记录。与我建议的方法相比,在地址字段上简单地使用
比如
查询会更有效吗?在后一个数据集中(由脚本适应)经常会遇到以下变化:


根据您使用的数据库系统,您必须尝试查看是否可以使用任何内置功能。 例如,如果您正在使用SQL SERVER,我可以想到的选项是“更改数据捕获”、“全文搜索”、“筛选索引”等等…。。 但是,不管数据库系统是什么,如果您想开发自己的、可以在任何数据库系统上实现的系统,那么您可能会感兴趣

您所要求的是建议一些索引选项,但对我来说,这不是正确的问题,因为随着表中数据的增长和/或您的搜索条件变得复杂,您的选项将非常有限。如果模式设计本身是不可伸缩的,那么您将无法在以后的极端数据情况下实现更多的性能改进

我在我们的项目中创建了一个设计来实现所谓的“谷歌式搜索”,而用户开始键入文本,结果中应该会出现相应的匹配文本建议。 用户还可以通过设置来控制应执行的搜索类型

我的意思是“精确匹配”、“相似匹配”、“以A开头”、“以A结尾”或“包含A”

在您的情况下,地址是一种很少发生精确匹配的数据。所以我想你可以跳过它,但如果你想实现它,可以做一些改变。您可以根据需要定制它,具体取决于您想要处理的复杂程度。 这是一个概念

我们需要5张桌子

现在的问题是这个模式如何帮助或改进模糊搜索

请注意,每个表只有2个整型和/或字符串类型的集群,我们可以在包含这两个列的每个表上使用聚集索引

因为我们已经按照准确度将数据分离出来,所以您可以为用户提供选择,让用户可以访问多少准确的数据。这将减少搜索负载并批量执行搜索操作

如果这是你想要的,请告诉我。创建虚拟数据并提供性能数据并不是什么大问题。我可以帮助您完成最终设计,这可能对您有用。


一个单独的表如何?该表包含每个可能匹配的行,链接回原始表的一条记录。当您查询匹配项时,您可以使用该表的单个索引来查询该表。但可能的匹配项必须来自引用数据。您是说从引用数据中可能的匹配项生成一个表,然后使用该表而不是包含用户提供的地址数据的引用数据执行匹配尝试吗?这会提高性能吗?这就是我所想的-因此,当您将
123 E Main
插入到实际表中时,您将插入
123 Main
123 East Main
,并且无论新表中存在多少其他可能性-这些记录中的每一条都有一个与原始记录相对的FK。查询时,您将查询新表。我不确定性能是否会很好,但这将是一个简单的解决方案,因为在单个列上有一个简单的索引,并且检索可能匹配项的所有逻辑都会提前完成一次,而不是在
select
查询过程中执行。这是有意义的。我会考虑的。谢谢你,乔!哇,非常彻底的回答,阿努普。我为迟来的答复道歉。到了实施的时候,我一定会考虑到所有这些。
Address: 100 W MAIN
City: 
Zip: 45502

Address: 100 MAIN ST
City: SPNGFLD
Zip:

Address: 100 W MAIN STREET
City: SPRINGFIELD
Zip: 54502

Address: 100 MAIN
City: NORTHRIDGE
Zip: 45502