我在Server 2008中工作。我试图返回给定列有一个子字符串的所有记录,该子字符串至少匹配一个非常大的令牌集的一个令牌。我搜索的列数量也相当大。做这件事最好的方法是什么?
我知道最基本的方法是:
WHERE
(col1 LIKE '%token1%' OR col1 LIKE '%token2%' OR...
OR
col2 LIKE '%token1%' OR col1 LIKE '%token2%' OR...
OR
. . . .
) 然而,这将是非常繁琐和庞大的。
发布于 2014-06-26 19:52:54
这是一个有点长的评论。
你基本上有两种选择。第一个是全文搜索。也就是说,将每一列视为文档,并在其上创建全文索引。
第二种选择是使数据结构正常化。您将为每个列中的每个令牌创建一个单独的行。这个规范化结构中的一行如下所示:
EntityId "Column" Token
1 col1 Toke1
1 col3 Toke2
2 col1 Toke2
. . .这种结构将大大加快使用适当索引的搜索速度。
顺便说一下,你的数据结构看起来很可疑。包含列中事物列表的表通常是个坏主意。关系数据库中列表的适当数据结构是表,而不是列。包含相同类型信息(例如标记列表)的多列表通常建议对列进行非规范化。
https://stackoverflow.com/questions/24438936
复制相似问题