给出一种字符串匹配算法,该算法适用于某些字符串(例如“ 123456789”)和字符串模式(例如“ 1 ******* 9”)。 字符串模式不是任何形式的regexp或SQL LIKE模式-它们仅提供“ *”占位符,表示“单个数字或字母”。
因此,该算法会将这些值视为“相等”:
12ABCDE89
12A***E89
**A****8*
*********
数据存储在关系数据库(MS SQL Server)中,.net核心应用程序通过EntityFramework Core对其进行寻址。 所需的方案是获取500个输入字符串(某些或某种模式)并在数据库中找到匹配的行(在包含100万行的表中)。
首先,我使用LIKE模式匹配来实现它(首先,我将输入字符串转换为LIKE模式,然后为WHERE子句构建了谓词),但是测试表明它的性能令人无法接受。
我可以使用MSSQL的全文搜索功能来执行此任务吗?在这种情况下,谓词会是什么样?关于实施还有其他想法吗?
答案 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;
}