快速匹配输入字符串与db中的字符串

时间:2018-12-22 10:05:15

标签: sql-server full-text-search entity-framework-core

给出一种字符串匹配算法,该算法适用于某些字符串(例如“ 123456789”)和字符串模式(例如“ 1 ******* 9”)。 字符串模式不是任何形式的regexp或SQL LIKE模式-它们仅提供“ *”占位符,表示“单个数字或字母”。

因此,该算法会将这些值视为“相等”:

12ABCDE89
12A***E89
**A****8*
*********

数据存储在关系数据库(MS SQL Server)中,.net核心应用程序通过EntityFramework Core对其进行寻址。 所需的方案是获取500个输入字符串(某些或某种模式)并在数据库中找到匹配的行(在包含100万行的表中)。

首先,我使用LIKE模式匹配来实现它(首先,我将输入字符串转换为LIKE模式,然后为WHERE子句构建了谓词),但是测试表明它的性能令人无法接受。

我可以使用MSSQL的全文搜索功能来执行此任务吗?在这种情况下,谓词会是什么样?关于实施还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试CLR用户定义的函数方法(example)。但是您根本不需要使用SQL查询。只需使用您的算法比较2个字符串即可。理论上这种方法应该更快

  [SqlFunction(
      DataAccess = DataAccessKind.None,
      SystemDataAccess = SystemDataAccessKind.None,
      IsPrecise = true,
      IsDeterministic = true)
  ]

  // Have to be public and static
  public static bool CustomIsEqualTo(string baseString, string stringToCompare)
  {
      return true;   
  }