4

クライアントが名前の大きなリストを管理できるようにする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

4

5 に答える 5

0

各テーブルの統計を確認してください。SQLは設定に応じて統計を自動的に生成するため、2つのサーバーの統計セットは異なる場合があります。異なる統計が作成された場合、クエリに対して異なるクエリプランが選択されます。

次に、統計が更新されていることを確認します。各テーブルの統計の更新に関する情報は、BooksOnlineにあります。

http://msdn.microsoft.com/en-us/library/ms187348.aspx

フルスキャンで更新して、適切なデータを確実に取得できるようにします。

最後に、どちらも機能しない場合は、SQL Server Management Studioでクエリを実行しますが、[実際のクエリプランを含める]オプションを使用します。次に、クエリプランの任意の場所を右クリックして、[XMLとして保存]を選択します。2つの異なるクエリプランをWebのどこかに投稿してください。違いが何であるか、そしてその理由を見ていきます。

于 2009-01-27T21:13:11.627 に答える
0

これが役立つかどうかはわかりませんが、CONTAINSTABLEを使用してみることができます。これにより、結合順序を変更できます。

SELECT customer_id FROM Customers WHERE CONTAINS(customername、'Foobar')

になる

SELECT customer_id FROM Customers AS FTTABLE INNER JOIN CONTAINSTABLE(Customers、customername、'Foobar')FTINDEXONFTINDEX 。[Key]=FTTABLE.customer_id

于 2009-01-28T01:07:49.810 に答える
0

FTSインデックスは、SQLサーバーがその結果セットにのみ結合できるブラックボックスであり、where句や内部結合に関係なく、常にテーブル全体を検索します。FT検索のパフォーマンスを向上させるために私が見つけた1つの方法は、スキーマバインドビュー内の結合および非パラメーターベースのwhere句を実行し、そのビューで全文インデックスを検索することです。

于 2009-02-26T13:47:25.400 に答える
0

SQL Server の FTS サービスを使用したことはありませんが、最初の投稿者が言ったように、データ ウェアハウスをロードしたり、データベースをレポートしたりするときに、大量のデータをロードした後、正常に実行されていた特定のクエリの実行が非常に遅くなることがわかりました。各ロード後に sp_updatestats を実行すると、問題が修正されました (統計データベースの自動更新オプションがチェックされている場合でも (デフォルトではチェックされています))。

于 2009-02-03T04:06:36.993 に答える