我们有一个 Web 应用程序,允许客户管理大量名称列表。为了在这些列表中进行搜索,我们使用 SQL Server 2008 的 FTS,它通常运行良好。我们最大的客户拥有 900,000 个姓名,并享有亚秒级的搜索时间。
然而,对于另一个新客户端,我最近导入了 150,000 个名称,性能很糟糕(例如,服务器非常糟糕)。我检查了全文索引器,它声称最近完成了一次爬网。
查看执行计划,我注意到在快速情况下(对于较大的客户端),SQL Server 首先执行 FTS,然后对结果执行索引搜索。对于较新的客户端,它首先进行索引搜索(显然,对于新记录,150,000 次),然后进行 FTS。
所以我尝试了 WITH(INDEX(MyFullTextIndex)) 提示,但 SQL Server 说索引不存在。显然,它不认为这些 FTS 索引是“真正的”索引。如何强制 SQL Server 始终首先使用 FTS?
更新:我尝试重新生成统计信息,但无济于事。同样的性能问题。
以下是执行计划:
快速性能: http: //frameaction.com/LLExecutionPlan01.sqlplan
性能缓慢:http: //frameaction.com/LLExecutionPlan18.sqlplan