MS SQL 2005 FullText目录的替代方案

时间:2009-02-21 01:12:47

标签: sql-server performance clr full-text-search

我似乎无法从FullText目录中获得可接受的性能。我们的情况是必须尽快运行100k +查询。有些查询使用FREETEXT,有些则没有。这是一个查询示例

IF EXISTS(从user_data d中选择1,其中d.userid=@userid和FREETEXT(*,@ activities)SET @ match = 1

这可能需要3-15秒。我需要它更快<如果可能,可以使用1秒。

我喜欢全文查询的“灵活性”,因为它可以搜索多个列,语法非常直观。我宁愿不使用Like语句,因为我们希望能够匹配像“Writer”和“Writing”这样的词。

我已尝试了此处列出的一些建议http://msdn.microsoft.com/en-us/library/ms142560(SQL.90).aspx

我们拥有尽可能多的内存和CPU,遗憾的是我们无法将目录放在他们自己的磁盘控制器上。

我很难过并准备探索FullText查询的其他替代方法。还有什么能给那种“作家”/“写作”类似的比赛吗?甚至可能使用CLR的东西?

3 个答案:

答案 0 :(得分:2)

查看这些替代方案,但我怀疑它们会在不将它们隔离到单独的硬件上的情况下提高性能:

Which search technology to use with ASP.NET?

Lucene.Net and SQL Server

答案 1 :(得分:0)

由于FREETEXT的性质,性能低于使用CONTAINS时的性能,因为它必须考虑到给定关键字的不太精确的替代方案。当您指定写入btw时,CONTAINS可以找到写入,我不确定您是否已经检查过CONTAINS是否会执行此操作。

还要确保在SQL中避免使用IF语句,因为它们通常会导致对每个查询执行执行计划的完全重新编译,这可能会导致您看到的性能不佳。我不确定如何使用IF语句,因为它可能在更大的SQL内部。尝试将EXISTS查询与更大的sql段合并,因为您可以在EXISTS内的SELECT语句中设置@match参数,或者完全删除变量并在更大的查询中使用EXISTS子句作为谓词。

SQL是一种面向集合的语言并被解释。因此,摆脱命令式编程结构并使用sql的本机set-operators通常会更快。

答案 2 :(得分:0)

也许https://github.com/MahyTim/LuceneNetSqlDirectory可以帮助你,它允许在SQLServer中存储LuceneNET索引。