We have a web application that allows clients to manage large lists of names. For searching on these lists, we use SQL Server 2008's FTS, which usually works well. Our largest client has 900,000 names and enjoys sub-second search times.
For another new client, however, I recently imported 150,000 names, and performance is terrible (as in, server-debilitatingly terrible). I checked the full-text indexer and it claims to have recently completed a crawl.
Looking at the execution plans, I notice that in the fast case (for the larger client), SQL Server does the FTS first and then does index seeks on the result. For the newer client, it does an index seek first (150,000 times, apparently, for the new records) and THEN does the FTS.
So I tried the WITH(INDEX(MyFullTextIndex)) hint, but SQL Server says that the index does not exist. Apparently it doesn't consider these FTS indexes to be "real" indexes. How can I force SQL Server to always use the FTS first?
UPDATE: I tried regenerating the statistics, to no avail. Same performance issues.
Here are the execution plans:
FAST performance: http://frameaction.com/LLExecutionPlan01.sqlplan
SLOW performance: http://frameaction.com/LLExecutionPlan18.sqlplan