在大量列中搜索大量令牌

时间:2014-06-26 19:45:31

标签: sql sql-server-2008

我正在使用SQL Server 2008.我正在尝试返回所有记录,其中给定列的子字符串与一组非常大的令牌中的至少一个令牌匹配。我正在搜索的列数也很大。做这个的最好方式是什么?

我知道基本方法是这样的:

WHERE  
    (col1 LIKE '%token1%' OR col1 LIKE '%token2%' OR...  
     OR  
     col2 LIKE '%token1%' OR col1 LIKE '%token2%' OR...  
     OR  
     .  . . .
    )  

然而,这将是非常乏味和大。

1 个答案:

答案 0 :(得分:2)

评论时间有点长。

你基本上有两种选择。首先是全文搜索。也就是说,将每列视为文档并在其上创建全文索引。

第二个选项是规范化您的数据结构。您将为每列中的每个标记创建一个单独的行。此规范化结构中的一行如下所示:

EntityId      "Column"     Token
    1           col1       Toke1
    1           col3       Toke2
    2           col1       Toke2
 . . .

此结构可以使用适当的索引大大加快搜索速度。

顺便说一句,您的数据结构看起来很可疑。包含列中事物列表的表通常是个坏主意。关系数据库中列表的正确数据结构是表,而不是列。包含多个列的表包含相同类型的信息(例如标记列表)通常表明列应该非规范化。