【发布时间】:2012-10-26 13:16:10
【问题描述】:
我有一个 SQL Server 2005 数据库,其中包含一个包含 4000 万条记录的表。每条记录都包含一列,该列存储以逗号分隔的关键字列表。每个关键字都是字母和数字的组合。关键字最长为 7 个字符,平均每条记录有 15 个关键字。关键字在行间不是唯一的。
我想搜索全部或部分关键字。
我创建了显示 328,245,708 个唯一键计数的全文索引。对于 4 个或更多字符的查询(在测试机器上约为 100ms),搜索效率还不错,但对于 3 个或更少字符的查询(最多 3s)则太慢了在测试机器上)。
我一直在尝试CONTAINSTABLE 和CONTAINS 的'[query]*' 查询,结果相似。
我认为短查询的性能较慢,因为短词在不同记录中重复的频率更高。
对结果进行排序并不重要,我一直在尝试返回从CONTAINSTABLE 排序的TOP X 结果。这不能提供所需的性能。
对于简短的查询,我怎样才能使这个搜索更快?
【问题讨论】:
-
我会重构表结构,使用关键字创建一个新表,并使用外键将其引用回原始表中的主键
-
我支持 t-clausen.dk。您可以为每个不同的关键字创建一个带有 ID 的表,然后创建一个包含 rowID/KeywordID 对的表,以及现有表和对表之间的一对多关系。
-
这会比关键字列上的全文索引带来性能提升吗?同样这样我会在搜索时面临重复结果可能性的问题。
标签: sql sql-server performance