2012-11-06 50 views
2

我有一个SQL Server 2005数据库,其中有一个包含4000万条记录的表。每条记录都包含一个存储逗号分隔的关键字列表的列。每个关键字都是字母和数字的组合。关键字长达7个字符,平均每条记录有15个关键字。关键字在行之间不唯一。在40M文本记录上快速SQL Server搜索

我想搜索全部或部分关键字。

我创建了显示328,245,708唯一键数的全文索引。搜索效率罚款(在测试机上围绕为100ms)的4个或更多字符的查询,但对于具有3点或更少的字符(最多三分在测试机器上)查询太慢。

我一直在试图用类似的结果排序'[query]*'两个CONTAINSTABLECONTAINS查询。

我认为短查询的性能比较慢,因为短词在不同记录中更频繁地重复。

排序结果并不重要,我一直试图返回TOP X结果排序从CONTAINSTABLE排名。这不能提供所需的性能。

如何使短搜索的搜索速度更快?

+0

我会重建表结构,使用关键字的新表,并使用一个外键 –

+0

我与t-clausen.dk指回主键原始表。您可以为每个不同的关键字创建一个具有ID的表格,然后使用rowID/KeywordID对创建一个表格,并在现有表格和对表格之间创建一对多关系。 – Beth

+0

相比于关键字列上的全文索引,性能会有所提升吗?同样,我会在搜索时遇到重复结果的可能性问题。 – mrt

回答

1

您可能希望将它网关到SOLRSphinx之类的东西,并让专门的文本搜索引擎处理搜索功能。

+0

与Sql Server全文索引比较,我应该期待什么样的性能增益范围 – mrt

+0

@MRT在这种情况下,快速谷歌(或bing)搜索可能会有用吗? – hd1

+0

您如何建议我为此目的使用Google搜索? – mrt

3

另一种选择是考虑正常化表的结构,这样你就会有你的数据记录在一个表中,你的标签在另一个表中,关联表标签涉及到的数据记录。这将允许您针对标签执行文本搜索,并简单地加入关联表以检索相关记录。

+0

与关键字列上的全文索引相比,它会有什么性能优势吗? – mrt

+0

当然。将标签分成单独表格的另一个好处是您可以在标签名称上创建索引。这可能会对文本搜索产生最深远的影响。 – Nathan

+1

难道不是如何全文索引背后的字 - 创建一个查找表与所有标签(单词)? – mrt