mysql - SQL与模糊比较

标签 mysql sql select fuzzy-logic fuzzy-comparison

假设我们有一张人物表(名字、姓氏、地址、SSN 等)。

我们想要找到与指定的人 A“非常相似”的所有行。 我想对 A 和表 People 中的所有行进行某种模糊逻辑比较。将有多个模糊推理规则分别作用于多个列(例如名称模糊规则 3 个,姓氏规则 2 个,地址规则 5 个)

问题是以下两种方法中哪一种更好,为什么?

  1. 将所有模糊规则实现为存储过程,并使用一个重型 SELECT 语句返回所有与 A“非常相似”的行。这种方法可能包括使用 soundex、sim metric 等。

  2. 执行一个或多个更简单的 SELECT 语句,返回不太准确的结果,与 A“相当相似”,然后将 A 与所有返回的行(数据库外部)进行模糊比较以获得“非常相似”的行。所以模糊比较将在我最喜欢的编程语言中实现。

Table People 最多应该有 500k 行,我想每天进行大约 500-1000 次这样的查询。我使用 MySQL(但这还有待考虑)。

最佳答案

我真的不认为有一个明确的答案,因为它取决于问题中没有的信息。无论如何,评论太长了。

DBMS 擅长根据索引检索信息。让数据库服务器在繁重的计算中浪费时间是没有意义的,除非它专用于此特定目的(如@Adrian 所回答)。

因此,您的客户端应用程序应将规则所需信息的检索委托(delegate)给 DBMS。

如果计算量很小,所有的都可以在服务器上完成。否则,将其拉入客户端系统。

第二种方法的缺点在于从服务器传输到客户端的数据量和建立的连接数。因此,通常它是服务器中计算和数据传输之间的折衷。根据模糊规则的特殊性实现平衡。

编辑:我在评论中看到您几乎肯定必须在客户端中实现代码。在这种情况下,出于维护目的,您应该考虑一个额外的标准,代码局部性,即尝试将所有相关的代码放在一起,而不是在系统(和语言)之间传播。

关于mysql - SQL与模糊比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15799861/

相关文章:

C++ MySQL数据库连接

mysql - SQL创建具有垂直默认值的表

sql - 转换为双引号类型的不一致

java - Hibernate 查询以选择 Datetime 列的时间范围内的行

mysql - 为另一列中的每个值选择不同的列,然后分组

mysql - MYSQL SELECT 语句中最常见的数字

PHP MySQL 从多个表中获取数据

php - php中函数的分组结果

sql - 使零出现在升序数字列表的最后

MySQL 查询效率不高(PHP 搜索)