Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 添加多条记录后SQL Server FTS性能_Sql Server_Performance_Full Text Search - Fatal编程技术网

Sql server 添加多条记录后SQL Server FTS性能

Sql server 添加多条记录后SQL Server FTS性能,sql-server,performance,full-text-search,Sql Server,Performance,Full Text Search,我们有一个web应用程序,它允许客户端管理大型名称列表。为了搜索这些列表,我们使用SQLServer2008的FTS,它通常运行良好。我们最大的客户有900000个姓名,搜索时间不到秒 然而,对于另一个新客户机,我最近导入了150000个名称,并且性能非常糟糕(例如,服务器非常糟糕)。我检查了全文索引器,它声称最近完成了爬网 查看执行计划,我注意到在fast情况下(对于较大的客户机),SQL Server首先执行FTS,然后对结果执行索引查找。对于较新的客户机,它首先进行索引搜索(显然,对于新记

我们有一个web应用程序,它允许客户端管理大型名称列表。为了搜索这些列表,我们使用SQLServer2008的FTS,它通常运行良好。我们最大的客户有900000个姓名,搜索时间不到秒

然而,对于另一个新客户机,我最近导入了150000个名称,并且性能非常糟糕(例如,服务器非常糟糕)。我检查了全文索引器,它声称最近完成了爬网

查看执行计划,我注意到在fast情况下(对于较大的客户机),SQL Server首先执行FTS,然后对结果执行索引查找。对于较新的客户机,它首先进行索引搜索(显然,对于新记录,搜索次数为150000次),然后进行FTS

因此,我尝试使用(INDEX(myfulltextinex))提示,但SQLServer说该索引不存在。显然,它不认为这些FTS索引是“真实”的索引。如何强制SQL Server始终首先使用FTS

更新:我尝试重新生成统计数据,但没有结果。同样的性能问题

以下是执行计划:

快速性能:

慢性能:
检查每个表上的统计信息。这两台服务器可能具有不同的统计数据集,因为SQL将根据您的设置自动生成统计数据。如果它创建了不同的统计信息,它将为查询选择不同的查询计划

然后,确保您的统计数据已更新。有关更新每个表的统计信息,请参见联机丛书:

我会用fullscan更新,以确保您获得良好的数据


最后,如果两者都不起作用,请在SQLServerManagementStudio中运行查询,但使用“包含实际查询计划”选项。然后右键单击查询计划上的任意位置并选择另存为XML。将这两个不同的查询计划发布到web上的某个地方,我们将查看它们之间的区别以及原因。

不确定这是否有帮助,但您可以尝试使用CONTAINSTABLE,它可以更改连接顺序

从客户中选择客户id 其中包含(客户名称, "Foobar")

变成

客户ASFTTABLE内部加入 CONTAINSTABLE(客户、客户名称、“Foobar”)FTINDEXON FTINDEX.[Key]=FTTABLE.customer\u id


我尝试在查询结束时添加“OPTIMIZE VALUE FOR UNKNOWN”提示(我还必须向查询中添加一个伪变量,以便在提示中引用某些内容)。到目前为止,它似乎运作良好。我对添加提示感到有点紧张,因此我仍在寻找更好的解决方案,但目前这是可行的。

我从未使用过SQL Server的FTS服务,但正如第一张海报所说,我发现,在加载数据仓库或报告数据库时,某些运行良好的查询在加载大量数据后运行得非常慢。每次加载后运行sp_updatestats修复了问题(即使选中了自动更新统计数据库选项(默认情况下为该选项)).

FTS索引是一个黑匣子,sql server只能将其结果集连接到它,它总是搜索整个表,而不考虑任何where子句或内部连接。我发现提高FT搜索性能的一种方法是在架构绑定视图和搜索中执行连接和任何基于非参数的where子句在该视图上创建全文索引