如何优化SQL Server全文搜索

时间:2013-04-17 13:23:22

标签: sql-server full-text-search freetexttable

我想将fulltextsearch用于自动完成服务,这意味着我需要它快速工作!最多两秒钟

搜索结果来自不同的表格,因此我创建了一个将它们连接在一起的视图。 我正在使用的SQL函数是FREETEXTTABLE()。

查询运行速度非常慢,有时长达40秒。

为了优化查询执行时间,我确保基表有一个聚簇索引列,它是一个整数数据类型(而不是GUID)

我有两个问题: 首先,关于如何更快地进行全文搜索的任何其他想法? (不包括升级硬件......) 第二,为什么每次重建完整文本目录后,搜索查询的工作速度非常快(不到一秒),但仅适用于第一次运行。我第二次运行查询时需要几秒钟而且从那里开始下山....任何想法为什么会发生这种情况?

2 个答案:

答案 0 :(得分:2)

重建目录后第一次查询速度非常快的原因可能非常简单:

删除目录并重建目录时,必须重建索引,这需要一些时间。如果您在重建完成之前进行查询,那么他们的查询速度会更快,因为更少的数据。您还应该注意到,您的查询结果包含的行数较少。

因此,在重建索引之后,测试查询速度才有意义。

以下选择可能很方便检查索引的大小(以及碎片)。当大小停止增长时,索引的重建就完成了;)

#include <wiringPi.h>
#include <mysql/mysql.h>

int main(int argc, char *argv[])
{
    wiringPiSetup();

    MYSQL *mysql1 = mysql_init(NULL);


}

答案 1 :(得分:1)

Here's a good resource退房。但是,如果您真的想要提高性能,则必须考虑升级硬件。 (通过将我的数据和全文索引文件移动到单独的读取优化磁盘以及将日志和tempdb移动到单独的写入优化磁盘,我看到了显着的性能提升 - 总共4个额外磁盘加上OS和SQL的1个额外磁盘服务器二进制文件。)

我推荐的其他一些非硬件解决方案:

  1. 自定义内置停用词列表以定义更多停用词,从而减小全文索引的大小。
  2. 更改tempdb的文件结构。请参阅herehere
  3. 如果您的视图对FREETEXTTABLE执行了多次调用,请考虑更改您的数据结构,以便视图只需进行1次调用。
  4. 然而,这些中没有一个可能是你想要加速的银弹解决方案。我怀疑这里可能还有其他因素(可能是性能不佳的服务器,网络延迟,服务器上的资源争用......),特别是因为你说每次执行时全文搜索都会变慢,这与我在我的经历。