クライアントが名前の大きなリストを管理できるようにするWebアプリケーションがあります。これらのリストを検索するには、SQL Server 2008のFTSを使用します。これは、通常は適切に機能します。私たちの最大のクライアントは900,000の名前を持っており、1秒未満の検索時間を楽しんでいます。
ただし、別の新しいクライアントの場合、最近150,000の名前をインポートしましたが、パフォーマンスはひどいものです(サーバーのように、衰弱させるほどひどいものです)。フルテキストインデクサーを確認したところ、最近クロールが完了したとのことです。
実行プランを見ると、高速の場合(大規模なクライアントの場合)、SQL Serverが最初にFTSを実行し、次に結果に対してインデックスシークを実行することがわかります。新しいクライアントの場合、最初にインデックスシークを実行し(明らかに、新しいレコードの場合は150,000回)、次にFTSを実行します。
そこで、WITH(INDEX(MyFullTextIndex))ヒントを試しましたが、SQLServerはインデックスが存在しないと言っています。どうやら、これらのFTSインデックスを「実際の」インデックスとは見なしていないようです。SQL Serverに常に最初にFTSを使用させるにはどうすればよいですか?
更新:統計を再生成しようとしましたが、役に立ちませんでした。同じパフォーマンスの問題。
実行計画は次のとおりです。
高速パフォーマンス: http: //frameaction.com/LLExecutionPlan01.sqlplan
パフォーマンスが遅い:http: //frameaction.com/LLExecutionPlan18.sqlplan